Отказ в подключении к контейнеру Docker MacOS

У меня есть файл для создания докеров:

networks:
    default:
        ipam:
            config:
                - subnet: 10.48.0.0/16
                  gateway: 10.48.0.1
services:
    haproxy:
        build: haproxy
        container_name: haproxy
        volumes:
            - ./haproxy/conf/:/usr/local/etc/haproxy/
            - ./haproxy/ssl/:/etc/ssl/xip.io/
        ports:
            - "80:80"
            - "443:443"
        networks: 
            default:
                ipv4_address: 10.48.0.2

    server:
        build: server
        container_name: server
        restart: always
        environment:
            - ENV=env=production db=true
        ports:
            - "8081:8081"
        volumes:
            - ./server/config:/usr/src/app/config
        depends_on: 
            - haproxy
        networks: 
            default:
                ipv4_address: 10.48.0.4

    frontend:
        build: frontend
        container_name: frontend
        restart: always
        ports:
            - "8080:8080"
        volumes:
            - ./frontend/config:/usr/src/app/config
        depends_on: 
            - server
        networks: 
            default:
                ipv4_address: 10.48.0.5
version: '2'

Для развертывания внутреннего сервера и внешнего интерфейса внутри подсети, определенной в диапазоне 10.48.0.0/16. Поэтому я попытался назначить каждому контейнеру фиксированный ip. В Linux все в порядке, поэтому я могу достичь 10.48.0.4_8081 / api, но в MacOS, когда я пытаюсь сделать то же самое, у меня появляется ERR_CONNECTION_REFUSED. Если я попытаюсь подключиться без IP, но с localhost: 8081 / api, это нормально. Но с несколькими контейнерами мне приходится обращаться напрямую по IP. Внутри каждого контейнера, если я попытаюсь выполнить эхо-запрос другого IP-адреса (например, из внешнего интерфейса контейнера с IP 10.48.0.5, я попытаюсь выполнить эхо-запрос 10.48.0.4), все будет в порядке. Итак, мой вопрос: как я могу сделать http-вызов api, который находится на другой службе? Спасибо за вашу помощь.

вы открыли порт в брандмауэре? выключите брандмауэр и посмотрите, работает ли он

Rutger Vk 27.10.2018 11:36

@RutgerVk привет, брандмауэр еще не активен на Mac

d_vucin91 27.10.2018 11:43

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

David Maze 27.10.2018 15:22

Привет @DavidMaze, подсеть в этом случае необходима для назначения фиксированного IP-адреса контейнеру, иначе он может быть изменен, а также конфигурация для приложений

d_vucin91 27.10.2018 20:55

Вы знаете, что контейнеры могут обращаться друг к другу, используя имя контейнера (или имя Docker Compose) в качестве имени DNS?

David Maze 27.10.2018 21:10

@DavidMaze Я знаю, но вопрос в другом. Мне не нужно вызывать контейнер изнутри другого, я должен вызвать службу, предоставляемую контейнером, через клиента (в данном случае браузер).

d_vucin91 07.11.2018 17:39
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
6
1 227
1

Ответы 1

Я везде читал, что это хорошо известная ситуация в Windows и Mac, но не в Linux, где можно со стороны клиента сделать запрос непосредственно на IP-адрес контейнера. Это невозможно на Mac, и проблема по-прежнему остается открытой на github. В этом случае я использовал haproxy для прокси-запросов к каждому контейнеру.

Другие вопросы по теме