如何实现同一主机不同Docker网络中两容器的Ping互通?附配置
解决方案:让分属不同Docker网络的容器实现单向Ping通
你的核心需求是让两个分属不同自定义网络的容器实现单向Ping通,当前配置的问题在于Docker默认会隔离不同的自定义网络——client仅在rete网络,server仅在rete_server网络,两者处于完全隔离的网络环境,自然无法互通。下面提供两种简单可行的实现方案:
方案一:让发起Ping的容器同时加入两个网络
这是最直接的方式,让需要主动Ping的容器(比如你的client)同时连接到自身的rete网络和server所在的rete_server网络,这样它就能直接访问两个网络内的资源。
修改后的docker-compose.yml配置如下:
version: "3.7" services: client: build: "./Client_Coap_Amplification_Attack" image: "pythonclient:latest" # 移除开头的/,避免被解析为仓库路径 networks: - rete - rete_server # 新增:让client同时加入server所在的网络 server: build: "./Server_Coap_Amplification_Attack" image: "mynode:latest" # 同样移除开头的/ container_name: server ports: - "8081:5683" networks: rete_server: ipv4_address: 172.19.1.2 networks: rete: ipam: driver: default config: - subnet: "172.19.0.0/24" rete_server: ipam: driver: default config: - subnet: "172.19.1.0/24"
验证方式
启动容器后,进入client容器执行Ping命令:
# 通过容器名Ping(Docker DNS会自动解析同一网络内的容器名) docker exec -it <client容器名> ping server # 或者通过指定IP Ping docker exec -it <client容器名> ping 172.19.1.2
方案二:让目标容器加入发起方的网络
如果你不想让client跨网络,可以反过来让server加入client所在的rete网络,这样client就能在自身网络内访问server。
操作步骤
- 先按你原有的配置启动容器:
docker-compose up -d
- 执行命令让
server容器连接到rete网络:
docker network connect rete server
验证方式
进入client容器,直接Pingserver的容器名或它在rete网络内分配的IP即可。
注意事项
- 原配置中
image字段的开头带有/是错误的,本地镜像名不应以/开头,否则会被Docker解析为远程仓库的绝对路径,需移除。 - 若使用容器名Ping,必须确保两个容器处于同一网络中(方案一的
rete_server网络、方案二的rete网络都满足这个条件),Docker内置的DNS服务仅对同一网络内的容器生效。
内容的提问来源于stack exchange,提问作者Andrea Fresa
相关产品推荐
相关产品推荐

