Как мне подключиться к контейнеру, используя хост, а не имя сервиса? - PullRequest
1 голос
/ 12 апреля 2019

Я бы хотел иметь возможность подключаться к локальному стеку, используя хост, а не имя службы. Я добавил изображение localstack в свой файл docker-compose и установил network_mode: "host". Я могу подключиться к http://localhost:8080 из других моих контейнеров. Но я не могу подключиться к: http://localhost:8080 с моего хоста. Как я могу подключиться к контейнеру, используя localhost, а не имя службы? Не уверен, что я неправильно понял, что делает network_mode: "host".

version: "3"
services:
  localstack:
    image: localstack/localstack:latest
    network_mode: "host"
    ports:
      - "4567-4584:4567-4584"
      - "${PORT_WEB_UI-8080}:${PORT_WEB_UI-8080}"
    environment:
      - AWS_REGION=us-east-1
      - SERVICES=sqs

Проблема в том, что я использую CircleCI для запуска некоторых тестов компонентов, но кажется, что в CircleCI вы можете ссылаться на другие сервисы только на локальном хосте, а не через имя сервиса. Это означает, что есть некоторая разница между моей локальной средой и настройками тестовой среды. Я попытался запустить docker-compose в CircleCI, но, похоже, это происходит локально. Поэтому я хотел посмотреть, смогу ли я сослаться на localhost между сервисами в docker-compose.

1 Ответ

1 голос
/ 12 апреля 2019

Это происходит потому, что Docker для Mac запускается на виртуальной машине с использованием гипервизора xhyve, а не на MacOS.

Когда вы запускаете контейнер с net=host, вы фактически используете сеть виртуальной машины, а неодин с вашего локального компьютера.

Это известное ограничение Docker для Mac, учитывая природу его работы.

Единственный способ получить доступ к контейнеру - использовать сопоставление портов, так что есливы удаляете network_mode:"host" из файла docker-compose, он должен работать, так как вы уже назначаете порты.

...