Linux Docker网络配置指南
小樊
34
2025-12-10 07:22:43
一 核心概念与网络模式
- bridge:安装 Docker 后自动创建 docker0 虚拟网桥,默认网段为 172.17.0.1/16。容器接入该网桥,获得私有 IP,容器间可二层互通;对外部网络默认不可见,需通过 NAT/端口映射 访问外网或被访问。适合单机多容器隔离通信。
- host:使用 –network=host 共享宿主机网络命名空间,直接使用宿主机 IP 和端口,无 NAT,网络性能更好,但端口与隔离性受限。适合对网络性能敏感、端口充足的场景。
- none:使用 –network=none 仅保留 lo 回环接口,完全禁用网络,适合批处理/离线任务的安全隔离。
- container:使用 –network=container:<NAME|ID> 与指定容器共享网络命名空间,适合“边车”模式、协同进程等需要 localhost 高效互通的场景。
二 常用网络命令
- 查看网络列表:docker network ls
- 创建网络:
- 自定义 bridge:docker network create --driver bridge --subnet 172.19.0.0/16 --gateway 172.19.0.1 mybridge_net
- 跨主机:overlay(Swarm/集群)、macvlan(接入物理二层网络)
- 连接/断开网络:docker network connect/disconnect
- 查看网络详情:docker network inspect
- 清理无用网络:docker network prune
- 查看端口映射:docker port
- 查看容器网络信息:docker inspect -f ‘{{.HostConfig.NetworkMode}} {{.NetworkSettings.Networks}}’
三 外部访问与端口映射
- 映射语法:
- 全部接口:-p 80:80
- 指定地址:-p 127.0.0.1:80:80
- 自动分配主机端口:-p 127.0.0.1::80
- 示例:
- 发布 Nginx 到宿主机 80:docker run -d -p 80:80 nginx:alpine
- 仅本机访问:docker run -d -p 127.0.0.1:8080:80 nginx:alpine
- 查看映射:docker port 80
- 原理要点:bridge 模式下容器无公网 IP,外部访问依赖 NAT/端口映射;host 模式直接使用宿主机端口,无需映射。
四 容器互联与服务发现
- 默认 bridge 网络不支持自动按容器名解析,建议使用自定义 bridge 网络:
- 创建网络:docker network create -d bridge my-net
- 启动容器加入网络:
- docker run -d --name web --network my-net nginx:alpine
- docker run -it --name app --network my-net busybox sh
- 在 app 容器内可直接 ping web(内置 DNS 将服务名解析为容器 IP)。
- 跨主机网络:
- overlay:用于 Swarm mode 多主机服务互联。
- macvlan:为容器分配与物理网络同网段的 二层 MAC/IP,对物理网络“像一台真实主机”,适合需要直接接入现有二层网络的场景。
五 实战排错与最佳实践
- 端口占用:启动失败提示 Bind for 0.0.0.0:80 failed: port is already allocated,改用未占用端口或停止占用进程;查看映射用 docker port。
- 主机网络端口冲突:使用 host 模式时,容器端口与宿主机端口直接复用,需确保端口未被占用。
- 自定义网段规划:创建 bridge 时显式指定 –subnet/–gateway,避免与宿主机/物理网络冲突。
- 外部无法访问:确认使用 -p 正确映射、云主机安全组/防火墙放行对应端口,bridge 模式对外不可达是预期行为。
- 容器间通信:优先使用自定义 bridge 以获得自动服务名解析与更好的隔离;需要极致网络性能且端口充足时再考虑 host;需要“像物理机一样”接入现有二层网络时使用 macvlan。