开发过程中偶尔会遇到不同的docker-compose之前通信,例如1台redis(A)、1台应用服务(B)分别在不同的网络中即net1_net1、net2_net2中,当B想订阅A时会发现网络不通

聊一个不是创建公用网络解决问题的方案

1. 网络net1_net1(A)
  • 目录 net1/docker-compose.yml
  • docker-compose.yml
version: '3.5'
# 网络配置
networks:
  net1:
    driver: bridge
  net2_net2:
    external: true
services:
  redis:
      image: "redis:alpine"
      container_name: net1-redis
      command: redis-server --appendonly yes
      networks:
        - net1
        - net2_net2
2. 网络net2_net2(B)
  • 目录 net2/docker-compose.yml
  • docker-compose.yml
version: '3.5'
# 网络配置
networks:
  net2:
    driver: bridge
services:
  php81:
      image: "php:8.1-fpm"
      container_name: net1-php81
      networks:
        - net2
  • 在容器中执行 ping net1-kafka
root@ad2e8f071f7e:/var/www/html# ping net1-redis
PING net1-redis (192.168.96.3) 56(84) bytes of data.
64 bytes from net1-redis.net2_net2 (192.168.96.3): icmp_seq=1 ttl=64 time=0.164 ms
64 bytes from net1-redis.net2_net2 (192.168.96.3): icmp_seq=2 ttl=64 time=0.115 ms
64 bytes from net1-redis.net2_net2 (192.168.96.3): icmp_seq=3 ttl=64 time=0.157 ms
64 bytes from net1-redis.net2_net2 (192.168.96.3): icmp_seq=4 ttl=64 time=0.250 ms
64 bytes from net1-redis.net2_net2 (192.168.96.3): icmp_seq=5 ttl=64 time=0.144 ms
64 bytes from net1-redis.net2_net2 (192.168.96.3): icmp_seq=6 ttl=64 time=0.073 ms
  • 或者直接在宿主机执行 docker exec -it net1-php81 ping net1-redis
➜  ~ docker exec -it net1-php81 ping net1-redis
PING net1-redis (192.168.96.3) 56(84) bytes of data.
64 bytes from net1-redis.net2_net2 (192.168.96.3): icmp_seq=1 ttl=64 time=0.140 ms
64 bytes from net1-redis.net2_net2 (192.168.96.3): icmp_seq=2 ttl=64 time=0.048 ms
64 bytes from net1-redis.net2_net2 (192.168.96.3): icmp_seq=3 ttl=64 time=0.089 ms
3.debian安装ping
  • 执行 apt-get update
  • 执行 apt-get install iputils-ping
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐