目錄

docker network 指令:建立網路、連接容器與別名

docker network 管理 Docker 網路。網路的概念、預設網路與自訂網路的差別見 網路與容器互連。

子指令

指令說明
docker network ls列出網路
docker network create 名稱建立網路
docker network inspect 名稱詳細資訊,包含連接的容器與 IP
docker network connect 網路 容器讓執行中的容器加入網路
docker network disconnect 網路 容器讓容器離開網路
docker network rm 名稱...刪除網路(還有容器連接時不能刪)
docker network prune刪除所有沒有容器使用的自訂網路

docker network create 常用參數:

參數說明
-d, --driver驅動程式,預設 bridge
--subnet子網路,例如 172.30.0.0/24
--gateway閘道 IP
--ip-range只從子網路中的某一段分配 IP
--internal禁止連到外部網路
--ipv6啟用 IPv6
--label加上標籤

docker network connect 常用參數:--alias 別名、--ip 固定IP。

範例

$ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
58a492b7c501   bridge    bridge    local
720ed2121dc4   host      host      local
07184d7358b0   none      null      local

$ docker network create appnet
c94640ca44aae05529e21bfe93c1fd957f70ca0d4bcc40209e91aa434dbc65e4

$ docker network create --subnet 172.30.0.0/24 fixednet
320f2c205537c3957304a23459143038a39e3b3a9323edc3bb5cec13688a1cf5

$ docker run -d --name api --network appnet --network-alias backend nginx:1.30-alpine
a40d4c075b88d806529bc6b58f9e1a90f6bc918eed0af6a852e3e8983f3e8e7a

$ docker run --rm --network appnet alpine:3.23 sh -c "ping -c1 -W1 api >/dev/null && echo api ok; ping -c1 -W1 backend >/dev/null && echo backend ok"
api ok
backend ok

$ docker network inspect -f "{{range .Containers}}{{.Name}} {{.IPv4Address}}{{end}}" appnet
api 172.19.0.2/16
  • 預設有三個網路:bridge(預設)、host(直接使用主機網路)、none(沒有網路)。
  • 建立 appnet 與指定子網路的 fixednet。
  • api 容器加入 appnet,並用 --network-alias 多了一個名稱 backend。同一個網路中的其他容器用 api 或 backend 都能連到它。
$ docker network connect fixednet api

$ docker inspect -f "{{range \$k, \$v := .NetworkSettings.Networks}}{{\$k}}={{\$v.IPAddress}} {{end}}" api
appnet=172.19.0.2 fixednet=172.30.0.2

$ docker network disconnect fixednet api

$ docker network rm appnet
Error response from daemon: error while removing network: network appnet has active endpoints (name:"api" id:"df7a1c38176a")
exit status 1

$ docker rm -f api
api

$ docker network rm appnet fixednet
appnet
fixednet
  • network connect 讓執行中的 api 也加入 fixednet,它就有兩張網卡、兩個 IP:appnet 中是 172.19.0.2,fixednet 中是指定子網路內的 172.30.0.2。這是讓容器同時與兩組服務通訊的做法,例如反向代理同時連接前端網路與後端網路。
  • 還有容器連接時刪除網路會出錯:network appnet has active endpoints。先刪除容器(或 disconnect)才能刪除。

相關章節

動手練習

練習:建立一個 --internal 的網路 private,啟動一個容器加入它,確認容器無法連到外部(例如 ping -c1 1.1.1.1)。

答案
docker network create --internal private
docker run --rm --network private alpine:3.23 ping -c1 -W2 1.1.1.1

實測輸出 ping: sendto: Network unreachable:容器沒有通往外部的路由。練習完 docker network rm private。

常見問題

為什麼預設網路中不能用容器名稱連線?

預設的 bridge 網路沒有提供名稱解析。自訂網路(docker network create)和 Compose 建立的網路才會自動用容器名稱、服務名稱解析 IP。

--network-alias 有什麼用?

讓容器在網路中多一個名稱。例如把容器命名為 api-v2,但其他服務仍然連線到 backend;或多個容器使用相同的別名,簡單地分散請求。

--internal 網路是什麼?

加了 --internal 的網路,容器之間可以互連,但無法連到外部網路,適合放資料庫這類不需要上網的服務。

更新於 2026年10月14日