当通过docker compose运行时,Mongodb在主机上不可访问,但通过docker工作



我正试图从主机连接到docker容器中的mongodb(仅用于开发目的),但没有任何运气。我有下面的docker撰写文件。

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

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

C:Program FilesMongoDBServer3.4bin>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 FilesMongoDBServer3.4bin>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 FilesMongoDBServer3.4bin>docker --version
Docker version 17.09.0-ce, build afdb6d4
c:Program FilesMongoDBServer3.4bin>docker-compose --version
docker-compose version 1.16.1, build 6d1ac219

我正在使用通过hyper-v运行的窗口docker。

我的compose文件有什么问题,为什么它可以通过docker运行而不能通过docker compose工作。我在挠头,谷歌上搜索了几个小时,没有任何运气

通过docker-compose实现的其他端口共享(例如nginx、postgresql)非常好。

更新

请ubuntu上的朋友试试。同样的行为。因此,它是可复制的,而且根本不是窗口特有的。。通过docker工作,不通过docker撰写。即使当我尝试通过telnet连接时,mongo日志也会在通过docker运行时显示连接尝试,但在通过compose运行时没有显示。

此外,我还看到了通过compose运行时docker ps与通过docker运行时的差异。

组合上的端口列为

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

(0.0.0.0:27017->21017/tcp ) 

码头本身。

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

好吧,这个问题非常愚蠢和简单。

端口:-"27017:21017">

第二端口21017而不是27017。如何浪费一整天由于打字错误

如果您在linux上,它可以正常工作。当您在窗口中运行容器时,您需要执行端口远期操作。

netsh interface portproxy add v4tov4 listenport=27017 listenaddress=localhost connectport=27017 connectaddress=192.168.99.100(IP of the Docker)

无论对环回的调用是什么,它都会被重定向到带有docker主机的容器。

以下是关于windows主机的docker解决方案在windows中的端口远期的帮助讨论

这行我正在为通过hyper-v运行的窗口使用docker,说你在Windows上,docker不会是环回(127.0.0.1),你必须转发端口。

最新更新