#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. Я думаю, вам нужно обновить свой вопрос с помощью этой новой информации.