我想创建一个由三个容器中的一个主节点和两个从属节点组成的PostgreSQL集群。我想用docker-compose做到这一点。一切正常,但是我无法从Mac ping容器。
这是我的docker-compose.yml的代码。
在Stackoverflow上,有一个线程How could I ping my docker container from my host用于独立处理docker而非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可以从一个容器到达另一个容器。
答案 0 :(得分:1)
您应该能够从主机上ping
装载容器。
通过公共IP :
只需使用其 public IP。 (您一直在尝试ping您的 容器 local ip,在docker网络内部)
如何找到容器的公共IP?
ifconfig
来获取它。或
,或者通过在主机docker container inspect <container_id>
上运行。
它应该在NetworkSettings.<network_name>.IPAddress
下)
通过容器名称/ ID
docker在您的计算机上运行某种形式的dns,因此您也可以使用
容器名称或ID-ping <container_name/id>
注释
在docker网络外部访问容器的方法是通过其发布的端口。您已将docker网络上的端口5432
绑定到主机上的端口5442
,因此容器应在127.0.0.1:5442
处侦听并接受流量(即已绑定端口上的localhost)