"--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 в той же сети. Обратите внимание, что вам не нужно выставлять порт, если вы не собираетесь подключаться из внешнего мира, взаимосвязь между контейнерами в одной сети не требует сопоставления портов.