当通过docker-compose运行时,Mongodb无法在主机上访问,但通过docker运行
我试图从主机连接到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
但是,如果我没有直接构build,例如
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运行,但不能通过docker-compose工作。 我抓了几个小时,没有任何运气地用Googlesearch
通过docker-compose(例如nginx,postgresql)的其他端口共享工作得很好。
UPDATE
在ubuntu上问朋友试试。 同样的行为。 所以它的可重复性和它不是特定的窗口在所有..通过docker工作,不通过docker组成。 即使当我尝试通过telnet连接mongo日志显示连接尝试通过docker运行时,但没有显示通过撰写时运行。
另外我看到在通过合成运行时通过泊坞窗运行docker ps中的差异。
撰写的港口列为
( 27017/tcp, 0.0.0.0:27017->21017/tcp )
VS
(0.0.0.0:27017->21017/tcp )
在docker上。
它错过了第一个27017 / tcp部分可能是问题,但不知道为什么。
好的,问题是非常愚蠢和简单。
港口: – “27017:21017”
第二个港口21017而不是27017.如何浪费整天由于错字
如果你在Linux上,它工作正常。 当你在Windows中运行容器时,你需要做端口仲裁。
netsh interface portproxy add v4tov4 listenport=27017 listenaddress=localhost connectport=27017 connectaddress=192.168.99.100(IP of the Docker)
不pipe打电话回环它将被redirect到docker主机的容器。
以下是有关Windows主机的 Docker Solution for Windows在端口方面的帮助讨论
这行我正在使用docker for windows通过hyper-v运行。 ,说你在Windows上和docker不会是环回(127.0.0.1),你必须转发的端口。