You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现同一主机不同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。

操作步骤

  1. 先按你原有的配置启动容器:
docker-compose up -d
  1. 执行命令让server容器连接到rete网络:
docker network connect rete server

验证方式

进入client容器,直接Pingserver的容器名或它在rete网络内分配的IP即可。

注意事项

  • 原配置中image字段的开头带有/是错误的,本地镜像名不应以/开头,否则会被Docker解析为远程仓库的绝对路径,需移除。
  • 若使用容器名Ping,必须确保两个容器处于同一网络中(方案一的rete_server网络、方案二的rete网络都满足这个条件),Docker内置的DNS服务仅对同一网络内的容器生效。

内容的提问来源于stack exchange,提问作者Andrea Fresa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:05:20