当通过docker-compose运行时,Mongodb无法在主机上访问,但通过docker工作

时间:2017-10-25 00:57:34

标签: mongodb docker docker-compose

我试图从主机(仅用于开发目的)连接到docker容器中的mongodb而没有任何运气。 我有以下docker-compose文件。

version: '2.2'
services:
  mongo:
    image: mongo
    ports:
      - "27017:21017"

当我尝试连接到它时,我遇到了以下错误:

C:\Program Files\MongoDB\Server\3.4\bin>mongo
MongoDB shell version v3.4.9
connecting to: mongodb://127.0.0.1:27017
2017-10-25T03:48:53.331+0300 E QUERY    [thread1] Error: network error while attempting to run command 'isMaster' on host '127.0.0.1:27017'  :
connect@src/mongo/shell/mongo.js:237:13
@(connect):1:6
exception: connect failed

但是,如果我没有直接撰写就可以启动它,例如。

docker run --name my_mongox6 -d -p 27017:27017 mongo

哪个应该等同于上面的docker-compose文件。 它完美无缺

C:\Program Files\MongoDB\Server\3.4\bin>mongo
MongoDB shell version v3.4.9
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.9
Server has startup warnings:
2017-10-25T00:49:58.983+0000 I STORAGE  [initandlisten]
2017-10-25T00:49:58.983+0000 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2017-10-25T00:49:58.983+0000 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2017-10-25T00:49:59.076+0000 I CONTROL  [initandlisten]
2017-10-25T00:49:59.076+0000 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-10-25T00:49:59.076+0000 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2017-10-25T00:49:59.076+0000 I CONTROL  [initandlisten]

版本

c:\Program Files\MongoDB\Server\3.4\bin>docker --version
Docker version 17.09.0-ce, build afdb6d4

c:\Program Files\MongoDB\Server\3.4\bin>docker-compose --version
docker-compose version 1.16.1, build 6d1ac219

我正在使用docker for windows通过hyper-v运行。

我的撰写文件有什么问题,以及为什么它通过docker run运行但是无法通过docker-compose工作。我几个小时都没有抓住我的头,谷歌搜索

通过docker-compose(例如nginx,postgresql)进行的其他端口共享完全正常。

更新

要求ubuntu的朋友试试。相同的行为。因此它的可重现性并不是特定于Windows的..通过docker工作,不通过docker-compose工作。即使我尝试通过telnet连接mongo日志显示连接尝试时通过docker运行,但通过compose运行时没有显示。

另外,当通过compose运行时,我发现docker ps有所不同,通过docker运行时。

撰写的端口列为

 ( 27017/tcp, 0.0.0.0:27017->21017/tcp ) 

vs

(0.0.0.0:27017->21017/tcp ) 

在docker上。

它错过了第一个可能是问题的27017 / tcp部分,但不知道为什么。

2 个答案:

答案 0 :(得分:2)

好的,问题是超级愚蠢和简单。

端口: - " 27017:21017"

第二个端口21017而不是27017.如何因错字而浪费一整天

答案 1 :(得分:-1)

如果您使用的是Linux,它可以正常工作。当您在Windows中运行容器时,您需要进行端口远程控制。

$ sed -n '/BEGINNING/,${/HERE/{p;q}}' file

无论调用何种调用,它都将被重定向到带有docker主机的容器。

以下是有关使用docker Solution for Windows hosts

的Windows中端口远程控制的帮助讨论

这行 我使用docker for windows通过hyper-v运行。 ,比如说你在Windows和docker上不会是环回(127.0.0.1),你必须转发端口。