"--link" не работает для соединения двух контейнеров Docker

Я хотел бы запустить MongoDB в контейнере, это работает:

docker run -p 27017:27017 --name cdt -d mongo

тогда я хочу запустить сервер в другом контейнере, например так:

docker run --name foo --link cdt:mongo exec /bin/bash -c "node server.js"

Сервер node.js пытается установить соединение с mongodb localhost:27017, но он не может установить соединение.

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

Обратите внимание, что я могу успешно подключиться к контейнеру mongodb снаружи контейнера, но не с сервера внутри контейнера "foo".

1 ответ

Решение

Так localhost из контейнера всегда (99,5% времени) относится к самому контейнеру. Это также 99,5% времени не то, что вы хотите. Если вы используете links как это, вам нужно изменить localhost:27017 в mongo:27017 как это то, что вы 'монтируете' ссылку как (--link cdt:mongo).

Лучшим вариантом является использование сетей Docker вместо ссылок (которые устарели). Так:

$ docker network create my-net
$ docker run --name cdt --net my-net -d mongo
$ docker run --name foo --net my-net exec /bin/bash -c "node server.js"

Теперь вы будете ссылаться на свою базу данных через cdt:27017 поскольку имена контейнеров становятся разрешаемыми через DNS в той же сети. Обратите внимание, что вам не нужно выставлять порт, если вы не собираетесь подключаться из внешнего мира, взаимосвязь между контейнерами в одной сети не требует сопоставления портов.

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