目录
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日