开发过程中偶尔会遇到不同的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