21-Docker网络通信
Docker 网络通信:增删改查
一、查:查看网络信息
诊断网络问题的第一步是了解当前的网络配置。
常用命令:
- 查看所有 Docker 网络
1
docker network ls
- 查看特定网络的详细信息(如子网、网关、已连接容器等)
1
docker network inspect bridge
- 查看某个容器的网络配置(IP 地址、网关、MAC 地址等)实用提示:
1
docker inspect 容器名 | grep -A 15 "Networks"
遇到容器间无法通信时,优先使用 docker network inspect 检查它们是否在同一个网络中。
二、增:创建网络
Docker 支持创建多种类型的网络以满足不同场景需求。
常用命令:
- 创建自定义桥接网络(自动分配子网)
1
docker network create my_app_net
- 创建自定义桥接网络并指定子网与网关(避免 IP 冲突)
1
docker network create --driver bridge --subnet 172.20.0.0/16 --gateway 172.20.0.1 my_app_net
- 创建 Macvlan 网络(容器直接使用物理网络)最佳实践:
1
2
3
4
5docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.2 \
-o parent=ens160 \
my_macvlan_net
推荐使用自定义 Bridge 网络,因为其支持自动 DNS 解析,容器可以通过名称互访,避免默认 bridge 网络的通信限制。
三、改:连接/断开网络
灵活管理容器与网络的关系,实现动态调整。
常用命令:
- 运行容器并连接指定网络
1
docker run -d --name mysql --network my_app_net mysql:8.0
- 将正在运行的容器连接到新网络
1
docker network connect my_app_net 运行中的容器名
- 将容器从某网络断开
1
docker network disconnect bridge 运行中的容器名
- 为容器指定静态 IP(仅自定义网络有效)
1
docker run -d --name static-ip-container --network my_app_net --ip 172.20.0.100 nginx
容器间通信示例:
错误示范(默认 bridge 网络):
1 | docker run -d --name web1 nginx |
默认 bridge 网络仅支持 IP 通信。
正确示范(自定义 bridge 网络):
1 | 创建网络 |
自定义 Bridge 网络内置 DNS,容器名自动解析为 IP。
四、删:清理网络
定期清理未用网络资源,保持环境整洁。
常用命令:
删除指定自定义网络(需先断开所有容器)
1
docker network rm my_old_net
清理所有未被容器使用的自定义网络(谨慎操作)
1
docker network prune
补充:两个关键概念的“增改”操作
端口映射(-p 参数):让外部访问容器
本质是增加一条 DNAT 规则
- 增:将容器 80 端口映射到宿主机 8080 端口
1
docker run -d --name nginx -p 8080:80 nginx
- 改:映射到宿主机特定 IP(仅本机可访问,更安全)访问方式:http://宿主机IP:8080
1
docker run -d --name nginx -p 127.0.0.1:8080:80 nginx
网络驱动模式选择(–network 参数)
本质是修改容器的基础网络栈。
- 使用宿主机网络模式(高性能,无 NAT)
1
docker run -d --name nginx --network host nginx
- 使用 None 网络模式(完全隔离)总结表格:Docker 网络通信核心操作
1
docker run -d --name nginx --network none nginx
操作 核心命令 关键点/示例 查 network ls,network inspect,inspect <container>诊断问题的第一步 增 network create创建自定义 Bridge 网络, 实现容器名通信 改 run --network,network connect/disconnect容器加入同一自定义网络即可用名称互通 删 network rm,network prune定期清理,保持环境整洁 外联 run -p <host_port>:<container_port>打通容器与外部世界的通道
对于大多数单机 Docker 应用,最清晰、最可靠的网络通信方式是:
创建一个自定义 Bridge 网络,并将所有需要互通的容器通过 –network 参数连接到该网络。
这样可确保容器间通信稳定且易于管理。
