Как я должен подключиться к контейнеру, используя хост, а не имя службы?

#docker #docker-compose #circleci

#docker #docker-compose #circleci

Вопрос:

Я хотел бы иметь возможность подключаться к localstack, используя хост, а не имя службы. Я добавил 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 вы можете ссылаться только на другие службы на localhost, а не через имя службы. Это означает, что есть некоторые различия между конфигурациями моей локальной среды и тестовой среды. Я попытался запустить docker-compose в CircleCI, но, похоже, при этом локально происходит сбой. Итак, я хотел посмотреть, могу ли я ссылаться на localhost между службами в docker-compose.

Комментарии:

1. Какую ОС вы используете?

2. mac high sierra

3. Можете ли вы подробнее рассказать о том, какая проблема возникла у вас с Docker Compose на CircleCI? По моему опыту, это работает очень хорошо, по крайней мере, в исполнителе Docker.

Ответ №1:

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

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

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

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

Комментарии:

1. Но я не могу получить доступ к другим службам на localhost, а скорее по имени службы, когда она не используется network_mode:"host" . Проблема в том, что я использую circle ci для запуска некоторых тестов компонентов, но кажется, что в circle ci вы можете ссылаться только на другие службы на localhost, а не через имя службы. Это означает, что есть некоторые различия между конфигурациями моей локальной среды и тестовой среды. Я попытался запустить docker-compose в circleci, но, похоже, при этом локально происходит сбой. Итак, я хотел посмотреть, могу ли я ссылаться на localhost между службами в docker-compose.

2. ОК. Думаю, я понимаю, что вы имеете в виду. Это может быть скорее проблемой того, как работает CircleCI и как вы настроили там свой конвейер. Если вы используете localstack с помощью docker-compose, а затем CircleCI или аналогичный запускает отдельную службу вне вашей службы docker-compose, вы не сможете вызывать по имени службы, поскольку это возможно только для контейнеров, работающих в одной сети, поэтому вам нужно либо сообщить CircleCI о запуске этих компонентовв той же сети, что и ваш docker -создайте службы или вызовите их с помощью localhost. Я думаю, вам нужно обновить свой вопрос с помощью этой новой информации.