我试图从主机(仅用于开发目的)连接到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部分,但不知道为什么。
答案 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),你必须转发端口。