插件窝 干货文章 Docker和Linux:如何实现容器间的网络通信?

Docker和Linux:如何实现容器间的网络通信?

Docker 容器 网络 container1 833    来源:    2025-04-14

在Docker和Linux环境中实现容器间网络通信,主要通过以下几种核心方式实现。以下是详细解决方案:


一、Docker默认网络模式

1. Bridge网络(默认)

# 查看默认bridge网络
docker network inspect bridge

# 运行容器(默认连接到bridge网络)
docker run -d --name container1 nginx
docker run -d --name container2 nginx

# 测试通信(在container1内ping container2)
docker exec -it container1 ping container2
  • 限制:需通过IP通信,容器重启后IP会变化

2. 自定义Bridge网络

# 创建自定义网络
docker network create my-net

# 启动容器并指定网络
docker run -d --name container3 --network my-net nginx
docker run -d --name container4 --network my-net nginx

# 测试(可直接用容器名通信)
docker exec -it container3 ping container4
  • 优势:DNS自动解析容器名,隔离性更好

二、Host网络模式(直接共享主机网络)

docker run -d --name container5 --network host nginx
  • 特点:容器直接使用主机IP和端口,性能最佳但隔离性差

三、Overlay网络(跨主机通信)

# 初始化Swarm集群
docker swarm init

# 创建overlay网络
docker network create -d overlay my-overlay

# 在Swarm模式下部署服务
docker service create --network my-overlay --name service1 nginx
  • 适用场景:多主机Docker集群环境

四、Macvlan/IPvlan(直接分配MAC/IP)

# 创建macvlan网络
docker network create -d macvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 \
  -o parent=eth0 my-macvlan

# 运行容器
docker run -d --name container6 --network my-macvlan nginx
  • 特点:容器像物理设备一样获取IP,适合需要直接暴露的场景

五、Linux网络工具辅助

1. 手动配置路由(示例)

# 查看容器网络命名空间
docker inspect --format '{{.NetworkSettings.SandboxKey}}' container1

# 在主机上添加路由(需root权限)
ip route add 172.18.0.0/16 via <container-ip>

2. 使用iptables转发

# 允许容器间转发
iptables -A FORWARD -i docker0 -o docker0 -j ACCEPT

六、网络方案对比表

方案 隔离性 性能 适用场景
默认bridge 单机简单场景
自定义bridge 推荐的单机方案
Host模式 高性能需求场景
Overlay 中低 跨主机通信
Macvlan/IPvlan 需要直接暴露到物理网络

七、排错技巧

  1. 检查容器IP

    docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container1
    
  2. 测试网络连通性

    docker exec -it container1 curl http://container4
    
  3. 查看DNS解析

    docker exec -it container1 cat /etc/resolv.conf
    
  4. 监控网络流量

    docker exec -it container1 tcpdump -i eth0
    

根据具体场景选择合适的网络方案: - 开发测试推荐自定义bridge - 生产集群推荐overlay - 高性能需求考虑host或macvlan - 传统网络集成考虑ipvlan