从容器内连接到mongoDB会话

时间:2018-07-24 18:35:23

标签: mongodb docker go

我刚开始学习如何使用goLang构建微服务。我有一个整个项目并在本地运行,但是当我尝试部署它时,我遇到了一个问题。我正在与(mgo.Dial("localhost"))进行的会话不再起作用。当我将其放入docker映像时,它无法连接到本地主机,这很有意义,因为docker映像是通过新操作系统(在我的情况下为Alpine)构建的。我想知道如何使它连接。

很明显,当我研究此内容时,大多数人都想连接到作为docker容器的mongoDB会话,我想从docker容器中连接到mongoDB会话。同样,一旦准备好进行部署,如果发生任何更改,我将在kubernetes中使用StatefulSet。

例如,这就是我希望我的程序是这样的:

sess, err := mgo.Dial("localhost") //or whatever
if err != nil {
   fmt.Println("failed to connect")
else {
   fmt.Println("connected")

我尝试做的事情: Dockerfile:

FROM alpine:3.6

COPY /build/app /bin/
EXPOSE 8080

ENTRYPOINT ["/bin/app"]

在终端中:

docker build -t hell:4 .
docker run -d -p 8080:8080 hell:4

正如您所料,它表示未连接。端口映射也适用于项目的其余部分,而不是此部分。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

我认为您不应该尝试连接到计算机上运行的MongoDB服务器。考虑稍后再部署整个应用程序,以便让MongoDB服务器与服务一起在某个云或服务器上运行。

可以通过设置其他容器并将其链接到Go Web App来解决该问题。 Docker compose可以解决这个问题。只需将docker-compose.yml文件放在要在其中执行docker build的目录中即可。

version: '3'
  services:
    myapp:
      build: .
      image: hell:4
      ports:
        - 8080:8080
      links:
        - mongodb
      depends_on:
        - mongodb
  mongodb:
    image: mongo:latest
    ports:
        - "27017:27017"
    environment:
        - MONGODB_USER="user" 
        - MONGODB_PASS="pass"

类似的事情应该做(未经测试)。您有两项服务:一种针对您的应用程序,它根据您当前所在目录中的Dockerfile构建。此外,它链接到下面定义的名为mongodb的服务。可通过服务名称mongodb访问mongodb服务。

答案 1 :(得分:-1)

如果mongoDB服务器正在主机中运行,请用主机IP替换localhost。