目录

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日