Я настраиваю свою локальную среду разработки с контейнерами докеров. Docker-compose.yml выглядит следующим образом
version: '2'
services:
db:
image: mongo:3
mq:
image: rabbitmq:3
api:
build: .
image: my_app/api
ports:
- "3000:3000"
links:
- db
- mq
environment:
- NODE_ENV=development
Запускается без ошибок. И докер перечисляет 3 запущенных контейнера
docker-compose up -d
docker ps
e90e5a8b5d33 my_app/api "/usr/local/bin/node " 0.0.0.0:3000->3000/tcp my_app_api_1
42bfcd971b16 mongo:3 "/entrypoint.sh mongo" 27017/tcp my_app_db_1
a0685a816c47 rabbitmq:3 "/docker-entrypoint.s" 4369/tcp, 5671-5672/tcp, 25672/tcp my_app_mq_1
Однако, когда я пытаюсь связать эти запущенные контейнеры из другого контейнера
docker run --link my_app_mq_1:mq --link my_app_db_1:db -it worker
Я получаю ошибку
docker: Error response from daemon: Cannot link to /my_app_mq_1, as it does not belong to the default network.
Я тоже пробовал
docker run --link my_app_mq_1:mq --link my_app_db_1:db -it --net default worker
Та же ошибка.
Итак, как я могу связать работающий контейнер, запущенный docker-compose?
источник
--net
перед командой. Я столкнулся с этой проблемой при попытке запустить официальный образ докера Redis.моя команда запускать ссылки
источник
При использовании определения службы версии 2 и выше
docker-compose
создает пользовательскую сеть. Разрешение имен в пользовательской сети работает через встроенный DNS-сервер Docker. Вот соответствующая цитата из документации :Контейнеры также доступны по сетевым псевдонимам, которые
docker-compose
создает. Это можно проверить с помощью такой команды:Он печатает
["db","$CONTAINER_ID"]
.Предоставление ссылок
--link
не будет иметь никакого эффекта в случае существующей пользовательской сети. Можете убедиться и посмотреть, на/etc/hosts
каких строчках не будет соответствующих.Таким образом, достаточно следующей команды:
источник