如何在Debian Docker中进行网络配置
小樊
48
2025-12-28 16:50:10
在 Debian 上配置 Docker 网络
一 环境准备与基础检查
- 安装并启动 Docker(Debian 常见包名为 docker.io):
- 安装:sudo apt update && sudo apt install -y docker.io
- 启动与开机自启:sudo systemctl start docker && sudo systemctl enable docker
- 查看默认网络(安装后通常包含 bridge、host、none):docker network ls
- 查看网桥与 NAT 转发(便于排障):
- 查看网桥:brctl show(若未安装:sudo apt install -y bridge-utils)
- 查看 NAT 规则:sudo iptables -t nat -vnL
- 说明:Docker 默认创建 docker0 网桥,常见网段为 172.17.0.1/16,容器通过 NAT 访问外部网络。
二 常用网络模式与快速示例
- Bridge(默认):容器接入虚拟网桥,外部访问需端口映射(-p)
- 示例:docker run -d --name web -p 8080:80 nginx
- Host:容器直接使用宿主机网络栈,性能更高,端口无需映射
- 示例:docker run -d --network host nginx
- None:禁用网络,仅保留 lo
- 示例:docker run -d --network none busybox
- Container:与指定容器共享网络命名空间
- 示例:docker run -d --network container:web nginx
- 说明:Bridge 通过 docker0 与 iptables NAT 实现通信;Host 无网络隔离;None 仅回环;Container 共享对端网络。
三 自定义桥接网络与静态 IP
- 创建自定义桥接网络(指定子网与网关,便于规划地址):
- 示例:docker network create --driver bridge --subnet=192.168.10.0/24 --gateway=192.168.10.1 my_bridge
- 运行容器并指定静态 IP(必须在自定义桥接网络上,且 IP 落在子网内):
- 示例:docker run -d --name app --network my_bridge --ip 192.168.10.10 nginx
- 容器名直连:自定义桥接网络内置 DNS 发现,可用容器名互相访问(如 ping app)
- 将已存在容器接入网络或新增别名:
- 接入网络:docker network connect my_bridge existing_container
- 添加别名:docker network connect --alias db my_bridge existing_container
- 说明:默认的 bridge 不支持在 run 时直接指定 –ip;需先创建自定义桥接网络。
四 跨主机与物理网络接入
- Overlay(覆盖网络,适用于多主机/Swarm):
- 创建:docker network create --driver overlay --subnet=10.0.0.0/24 my_overlay
- 使用(Swarm):docker service create --network my_overlay --name web nginx
- Macvlan(容器直接接入物理网络,拥有独立 MAC/IP):
- 创建(示例将父接口设为 eth0,按需调整):
- docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 macvlan_net
- 运行容器(通常需与宿主机通信时加 macvlan 网关或额外路由,避免与宿主机二层隔离):
- docker run -d --network macvlan_net --name host1 nginx
- 说明:Overlay 用于跨主机容器通信;Macvlan 让容器像物理主机一样出现在二层网络,适合需要独立 IP/MAC 的场景。
五 守护进程配置与 Compose 示例
- 通过 /etc/docker/daemon.json 调整网络相关参数(修改后重启 Docker):
- 示例(设置默认网桥 IP 与 DNS):
- {
- “bip”: “192.168.1.1/24”,
- “dns”: [“8.8.8.8”, “1.1.1.1”]
- }
- 重启:sudo systemctl restart docker
- Docker Compose 示例(定义自定义桥接与端口映射):
- version: ‘3.8’
services:
web:
image: nginx:latest
ports:
- “8080:80”
networks:
- app_net
networks:
app_net:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
- 常用排障命令:
- 查看网络详情:docker network inspect <网络名>
- 查看容器网络与 IP:docker inspect <容器名>
- 连通性测试:docker exec -it <容器名> ping <目标IP/网关> 或 curl http://<目标>