无法连接Docker容器中的MongoDB

11

我已经构建了一个运行mongodb实例的Docker容器,该容器应该对主机公开。然而,当我想从主机连接到mongodb容器时,连接将被拒绝。

这是我的Dockerfile:

FROM mongo:latest

RUN  mkdir -p /var/lib/mongodb && \
     touch /var/lib/mongodb/.keep && \
     chown -R mongodb:mongodb /var/lib/mongodb

ADD mongodb.conf /etc/mongodb.conf

VOLUME [ "/var/lib/mongodb" ]

EXPOSE 27017

USER mongodb
WORKDIR /var/lib/mongodb

ENTRYPOINT ["/usr/bin/mongod", "--config", "/etc/mongodb.conf"]
CMD ["--quiet"]

/etc/mongodb.conf:

这是MongoDB的配置文件,在这里我明确地将IP绑定为0.0.0.0,如在SO上找到的,因为127.0.0.1可能是我的问题的根本原因(但它并不是)。

systemLog:
  destination: file
  path: /var/log/mongodb/mongo.log
  logAppend: true
storage:
  dbPath: /var/lib/mongodb
net:
  bindIp: 0.0.0.0

Docker容器正在运行,但主机无法连接:
host$ docker run -p 27017:27017 -d --name mongodb-test mongodb-image
host$ docker ps
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
6ec958034a6f        mongodb-image       "/usr/bin/mongod --co"   4 seconds ago       Up 3 seconds        0.0.0.0:27017->27017/tcp   mongodb-test

查找IP地址:

host$ docker inspect 6ec958034a6f |grep IPA
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.2",

尝试连接:

host$ mongo 172.17.0.2:27017
MongoDB shell version v3.4.0
connecting to: mongodb://172.17.0.2:27017
2016-12-16T15:53:40.318+0100 W NETWORK  [main] Failed to connect to 172.17.0.2:27017 after 5000 milliseconds, giving up.
2016-12-16T15:53:40.318+0100 E QUERY    [main] Error: couldn't connect to server 172.17.0.2:27017, connection attempt failed :
connect@src/mongo/shell/mongo.js:234:13
@(connect):1:6
exception: connect failed

当我通过ssh登录到容器时,我可以成功连接到Mongo并列出测试数据库。


3
你指定了映射端口为28001,为什么要连接到27017端口? - mustaccio
3
请在您的计算机主机上的浏览器中尝试访问 localhost:28001 - user2915097
1
28001是从另一个尝试中复制粘贴的错误。我在问题中将其替换为27017。顺便说一下,问题仍然存在。感谢@mustaccio的提示。 - delete
2
啊,我明白了。由于 EXPOSE 的原因,我必须连接到本地主机而不是容器的 IP 地址。这样就可以正常工作了。谢谢 user2915097! - delete
请参考以下链接:https://dev59.com/LGMm5IYBdhLWcg3wdu5V#34698336 - OWADVL
请使用localhost节点IP代替Docker IP。 - ROHIT KHURANA
2个回答

4

使用host.docker.internal:27017暴露的端口。


1

使用localhost而不是IP地址,允许连接。

将其与暴露的端口组合使用:localhost:27017

我按照评论中所述的解决方案进行了测试,它可以工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接