Docker 网络彻底搞懂:运维必备的核心知识
·
前言
Docker 会的人很多,但真正搞懂「Docker 网络」的人不多。
容器能不能互通?为什么端口映射了还是访问不到?跨主机网络怎么打通?
1. Docker 网络的核心认知(记住这 3 句话就够)
-
容器网络是隔离的(用 namespace 实现)
-
容器的网线是虚拟 veth 对接宿主机
-
真正干活的是 docker 的网络驱动(bridge/host/overlay/macvlan)
理解这三句话,Docker 网络就通了一半。
2. 四大网络模式(一个比一个关键)
① bridge(默认)— 90% 的项目都在用
-
容器独立 IP
-
NAT 转发访问外部
-
容器同网络内可互通
docker network create mynetdocker run -d --network mynet nginx
适用:所有单机部署。
② host — 性能最强,隔离最弱
-
直接使用宿主机网络堆栈
-
没有端口映射(因为本来就同一个网卡)
docker run --net host -d service
适用:高性能、需要宿主硬件、测速类服务。
③ none — 纯隔离,不给你网络
适合:安全测试、自定义网络。
④ overlay — 跨主机通信的灵魂
-
Docker Swarm 的核心
-
多主机容器像在同一个局域网
docker network create -d overlay app-net
适合:分布式服务、微服务集群。
3. 进阶驱动(你迟早会用)
macvlan
-
让容器拥有独立 MAC + 和宿主机一个网段
-
企业内网、硬件授权场景非常常用
(例如:某些授权系统必须绑定 MAC)
ipvlan
-
类似 macvlan,但更轻量
适合大量容器的部署场景。
4. Docker 网络必会命令(10 秒记住)
docker network ls# 查看网络docker network inspect bridge # 查看详情docker network create mynet # 创建网络docker network connect mynet web # 把容器加入网络docker network disconnect mynet webdocker network rm mynet # 删除网络
最常用的排查命令:
docker exec -it web ping dbdocker exec -it web curl http://db:8080
5. Docker Compose 网络(你一定会用到)
services:web:image: nginxnetworks:- frontapi:image: apinetworks:- front- backdb:image: mysqlnetworks:- backnetworks:front:back:
前后端隔离、分层清晰。
6. 常见踩坑(90% 都是这些)
❌ 1. 容器互 ping 不通?
不是一个网络。
❌ 2. 映射端口不生效?
使用了 --net host。
❌ 3. overlay 不通?
节点之间端口没放通。
❌ 4. DNS 解析慢?
宿主机 DNS 被劫持,建议指定 --dns。
7. 最佳实践
-
永远使用自定义网络,不要依赖默认 bridge
-
跨主机尽量用 overlay / flannel / calico
-
性能敏感服务用 host 网络
-
企业内网、需要真实 IP → 用 macvlan
-
容器名就是 DNS,无需写死 IP
更多推荐

所有评论(0)