Когда вы запускаете службу и mongodb
в докере, вы не можете использовать localhost
, поскольку служба находится в другом контейнере, чем mongodb
, и с точки зрения докера она находится под другим IP-адресом.
Вы можете соединиться с именем службы, которое вы указали в docker-compose datastore
mongo.Connect("mongodb://datastore:27017")
Редактировать:
из: https://docs.docker.com/compose/networking/
По умолчанию Compose настраивает единую сеть для вашего приложения.Каждый контейнер для службы присоединяется к сети по умолчанию и доступен как другим контейнерам в этой сети, так и обнаруживается ими с именем хоста, идентичным имени контейнера
Это означает, что при запуске нескольких контейнеров через composeВы можете получить доступ к одному контейнеру из другого по имени контейнера,
Обычно, когда запускается docker-compose
, он устанавливает сеть, и каждый контейнер в compose присоединяется к сети под своим именем контейнера.Для точки контейнера, если смотреть, localhost
- это просто сам контейнер, в то время как он может искать имя другого контейнера и возвращать IP-адрес контейнера.
Предполагая, что докер работает на вашем локальном хосте, вы можетеустановить имя в etc/hosts
файле следующим образом:
127.0.0.1 datastore
(если не просто заменить 127.0.0.1
на IP-адрес докера)
И в приложении вы будете подключаться с mongodb://datastore:27017
Таким образом, вы сможете запускать службу как в докере, так и извне, если решите запустить только db
в докере
docker-compose start datastore