目錄
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)才能刪除。
相關章節
- 網路與容器互連
- Nginx 與反向代理
- compose.yaml 語法:Compose 中的
networks
動手練習
練習:建立一個 --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日