连接到docker mongo db映像

时间:2020-05-31 02:10:50

标签: mongodb docker networking

我正在尝试使用these instructions来尝试在容器中运行mongodb docker映像。

我能够运行图像:

(virtual) anonymous@anonymous:~/PycharmProjects/PostDekko/climbticks-flaskmongoangul$ sudo docker container ls
CONTAINER ID        IMAGE                                COMMAND                  CREATED             STATUS              PORTS                    NAMES
431a9d693f48        mongo:bionic                         "docker-entrypoint.s…"   24 minutes ago      Up 24 minutes       27017/tcp                climbticks-mongodb
f12d227dcdd8        climbticks-flaskmongoangul_web_dev   "python3.8 index.py"     3 hours ago         Up 3 hours          0.0.0.0:4000->4000/tcp   climbticks-flaskmongoangul_web_dev_1

我的项目在第二个容器中,而mongodb映像为container_id 431a9d693f48。我还可以访问日志,因此我知道它可以运行。

根据他们的指示:

映像中的MongoDB服务器在标准MongoDB端口上侦听, 27017,因此通过Docker网络进行的连接将与 连接到远程蒙哥。以下示例开始另一个 MongoDB容器实例并运行mongo命令行客户端 相对于上面示例中的原始MongoDB容器, 允许您对数据库执行MongoDB语句 实例:

> $ docker run -it --network some-network --rm mongo mongo --host
> some-mongo test

...,其中some-mongo是原始mongo容器的名称。

但是...。我不知道我的“网络”应该是什么。从docker的角度来看,我认为network参数表示网络ID。如果我运行:

(virtual) anonymous@anonymous:~/PycharmProjects/PostDekko/climbticks-flaskmongoangul$ sudo docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
7fbed634dbdf        bridge              bridge              local
0843e5ae6173        host                host                local
6b3c8eb4b216        none                null                local
cc3d76f1f109        web_dev             bridge              local

我得到4个网络ID。 web_dev是我项目的(网络服务器)容器。如果尝试4种方法之一,我将得到:

(virtual) anonymous@anonymous:~/PycharmProjects/PostDekko/climbticks-flaskmongoangul$ sudo docker run -it --network cc3d76f1f109 --rm mongo mongo --host climbticks-mongodb test
MongoDB shell version v4.2.7
connecting to: mongodb://climbticks-mongodb:27017/test?compressors=disabled&gssapiServiceName=mongodb
2020-05-31T01:55:08.771+0000 E  QUERY    [js] Error: couldn't connect to server climbticks-mongodb:27017, connection attempt failed: HostNotFound: Could not find address for climbticks-mongodb:27017: SocketException: Host not found (authoritative) :
connect@src/mongo/shell/mongo.js:341:17
@(connect):2:6
2020-05-31T01:55:08.779+0000 F  -        [main] exception: connect failed
2020-05-31T01:55:08.779+0000 E  -        [main] exiting with code 1

我也尝试了各种本地主机(0.0.0.0,本地主机等)的表达式,即使这对我来说没有意义。

那么......我怎么找到网络应该是什么?

编辑:尽管如果我在外壳中连接到数据库:

sudo docker exec -it climbticksmongodb bash

然后我可以谈谈。因此,数据库处于活动状态。看来,我真的只需要弄清楚网络问题。

1 个答案:

答案 0 :(得分:1)

启动容器时,它将在默认的桥接网络中启动,因此,如果不指定连接到容器的任何网络,它们将无法相互连接。

有几种方法可以使它们彼此交互。您可以创建一个网络,然后将它们都连接。

例如:

docker network create -d bridge my-bridge-network

然后用--network my-bridge-network将其附加到两个docker run命令。

或使用docker <container> attach <network>

将其附加到正在运行的容器中

这也是docker-compose修复程序的问题,您可以在连接了相同网络的情况下运行各种容器。

另一种方法是使用特殊的DNS host.docker.internal,它实际上是容器主机localhost。因此,如果您执行docker run mongo -p 27017:27017并且要连接到另一个容器中,则可以连接到host.docker.internal:27017,这是您的端口27017绑定到mongo容器27017的地方。

有关docker文档的更多详细信息:

https://docs.docker.com/network/network-tutorial-standalone/