Невозможно пропинговать контейнер докера, созданный с помощью docker-compose - PullRequest
0 голосов
/ 01 мая 2019

Я хочу создать кластер PostgreSQL, состоящий из главного и двух подчиненных в трех контейнерах.Я хочу сделать это с помощью docker-compose.Все работает нормально, но я не могу пропинговать контейнеры с моего Mac.

Вот код моего docker-compose.yml.

В Stackoverflow есть эта нить Как я могу пропинговать свой докер-контейнер с моего хоста , который адрес докера автономный, а не 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 я могу пропинговать свой контейнер, но это невозможно.Я думаю, что это связано с созданием виртуальной машины Linux внутри Mac, где контейнеры живут, а IP-адреса вне этой виртуальной машины недоступны.

Может ли кто-нибудь помочь мне понять, как сделать эти три IP-адреса доступными?IP-адреса доступны из одного контейнера в другой.

Вот мой полный код: https://github.com/sasadangelo/docker-postgres

1 Ответ

1 голос
/ 01 мая 2019

вы должны иметь возможность ping ваших контейнеров с вашего хоста.

  • через публичный ip :

    просто используйте их public ip. (вы пытались пинговать контейнер локальный ip, внутри сети докеров)

    как найти контейнер публичного IP?

    • вы можете получить его, запустив ifconfig внутри контейнера.

    или

    • или запустив на хосте docker container inspect <container_id>.

      должно быть там под NetworkSettings.<network_name>.IPAddress)

  • через имя контейнера / id

    Docker запускает какой-то DNS на вашем компьютере, так что вы также можете использовать имя или идентификатор контейнера - ping <container_name/id>

примечание

способ доступа к вашим контейнерам вне сети докеров через их опубликованные порты. вы связали порт 5432 в сети докера с портом 5442 на вашем хосте, поэтому контейнер должен прослушивать и принимать трафик на 127.0.0.1:5442 (это ваш локальный хост на порте, который вы связали)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...