无法ping用docker-compose创建的docker容器

问题描述 投票:0回答:1

我想创建一个由主服务器和三个容器中的两个从服务器组成的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可以从一个容器到达另一个容器。

在这里我的完整代码:https://github.com/sasadangelo/docker-postgres

docker docker-compose
1个回答
1
投票

你应该能够从你的主人那里ping你的容器。

  • 通过公共IP: 只需使用他们的公共IP。 (你一直试图ping你的容器本地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的流量(这就是你绑定的端口上的本地主机)

© www.soinside.com 2019 - 2024. All rights reserved.