Как подключить локальную базу данных Mongo к докеру - PullRequest
0 голосов
/ 13 сентября 2018

Я работаю над проектом golang, недавно я прочитал о docker и пытаюсь использовать docker с моим приложением.Я использую mongoDB для базы данных.Теперь проблема в том, что я создаю Dockerfile для установки всех пакетов, компиляции и запуска проекта go.Я запускаю данные монго как локально, если я запускаю программу go без докера, это дает мне вывод, но если я использую docker для того же проекта (просто устанавливаю зависимости с этим и работающим проектом), он компилируется успешно, но не выдает никакого вывода,с ошибкой ::

CreateSession: no reachable servers 

мой Dockerfile ::

# Start from a Debian image with the latest version of Go installed
# and a workspace (GOPATH) configured at /go.
FROM golang
WORKDIR $GOPATH/src/myapp

# Copy the local package files to the container's workspace.
ADD . /go/src/myapp

#Install dependencies
RUN go get ./...

# Build the installation command inside the container.
RUN go install myapp

# Run the outyet command by default when the container starts.
ENTRYPOINT /go/bin/myapp

# Document that the service listens on port 8080.
EXPOSE 8080
EXPOSE 27017

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Как вы указываете соединение с mongodb в своем проекте golang? локальный: 27017

Если вы используете localhost в своем коде, ваш докер-контейнер будет localhost, и, поскольку у вас нет mongodb в том же контейнере, вы получите ошибку.

Если вы запускаете докер с командной строкой docker run ..., добавьте --network="host". Если вы используете docker-compose, добавьте network_mode: "host"

В идеале вы должны установить mongodo в его собственный контейнер и подключить их из вашего docker-compose.yml - но это не то, что вы просите. Так что я не буду вдаваться в подробности.

В будущих вопросах, пожалуйста, включите, насколько это возможно, соответствующий Dockerfile, docker-compose.yml. Это поможет нам дать более конкретный ответ.

0 голосов
/ 13 сентября 2018

Когда вы запускаете приложение в Docker, оно работает в виртуальной среде;Это похоже на другой компьютер, но все виртуально, включая сеть.

Чтобы подключить свой контейнер к хосту, Docker присваивает ему специальный IP-адрес и присваивает этому IP-адресу URL со значением host.docker.internal. * 1004.*

Таким образом, предполагая, что mongo работает с привязкой на каждом интерфейсе на хост-машине, из контейнера можно получить строку подключения:

mongodb: //host.docker.внутренний: 21017 / база данных

Упрощение, Just use host.docker.internal as your mongodb hostname.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...