我想创建一个由主服务器和三个容器中的两个从服务器组成的PostgreSQL集群。我想用docker-compose做到这一点。一切正常,但我不能ping我的Mac容器。
这是我的docker-compose.yml的代码。
在Stackoverflow上有这个线程How could I ping my docker container from my host,它解决了docker standalone而不是docker-compose。
version: '3.6'
volumes:
pgmaster_volume:
pgslave1_volume:
pgslave2_volume:
services:
pgmaster:
container_name: pgmaster
build:
context: ../src
dockerfile: Dockerfile
image: docker-postgresql:latest
environment:
NODE_NAME: pgmaster # Node name
ports:
- 5422:5432
volumes:
- pgmaster_volume:/home/postgres/data
networks:
cluster:
ipv4_address: 10.0.2.31
aliases:
- pgmaster.domain.com
pgslave1:
container_name: pgslave1
build:
context: ../src
dockerfile: Dockerfile
image: docker-postgresql:latest
environment:
NODE_NAME: pgslave1 # Node name
ports:
- 5441:5432
volumes:
- pgslave1_volume:/home/postgres/data
networks:
cluster:
ipv4_address: 10.0.2.32
aliases:
- pgslave1.domain.com
pgslave2:
container_name: pgslave2
build:
context: ../src
dockerfile: Dockerfile
image: docker-postgresql:latest
environment:
NODE_NAME: pgslave2 # Node name
ports:
- 5442:5432
volumes:
- pgslave2_volume:/home/postgres/data
networks:
cluster:
ipv4_address: 10.0.2.33
aliases:
- pgslave2.domain.com
networks:
cluster:
driver: bridge
ipam:
config:
- subnet: 10.0.2.1/24
在我的Mac上,我有一个192.168.0.0的本地网络。我希望ping 10.0.2.31我可以ping我的容器,但这是不可能的。我认为这是由于在Mac中创建的Linux VM,其中容器存在并且在此VM之外无法访问IP。
有人可以帮我理解如何使上述三个IP可达吗? IP可以从一个容器到达另一个容器。
你应该能够从你的主人那里ping
你的容器。
ifconfig
来获得它。
要么
或者通过在你的主机docker container inspect <container_id>
上运行。
它应该在NetworkSettings.<network_name>.IPAddress
下面)ping <container_name/id>
注意
在docker网络之外访问容器的方法是通过他们发布的端口。你已经在docker网络上将端口5432
绑定到主机上的5442
端口,因此容器应该监听并接受127.0.0.1:5442
的流量(这就是你绑定的端口上的本地主机)