我正在尝试连接到本地 Windows 机器上的 docker mongo 映像,我在本地安装了 mongodb,并将 mongodb bin 路径添加到 Windows 路径环境变量中。我正在执行以下步骤
cd <docker-location>
docker login
docker ps
-- 检查 mongo 是否正在运行
docker pull myrepo/mymongo-image:1.0
docker run -p 27017:27017 -d --net=host --name=mytestDB myrepo/mymongo-image:1.0
docker logs mytestDB
输出:MongoDB 启动:pid=6 port=27017 dbpath=/data/db 64 位 host=moby docker ps 输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
34598734598 myrepo/mymongo-image:1.0 "/bin/sh -c /usr/bin/" 12 hours ago Up About a minute mytestDB
在本地启动 mongo:
mongo --port 27017
但我收到了这样的错误:
MongoDB shell version: 3.2.1
connecting to: 127.0.0.1:27017/test
2016-10-13T20:04:12.273+0530 W NETWORK [thread1] Failed to connect to 127.0.0.1:27017, reason: errno:10061 No connection could be made because the target machine actively refused it.
2016-10-13T20:04:12.277+0530 E QUERY [thread1] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed :
connect@src/mongo/shell/mongo.js:226:14
@(connect):1:6
exception: connect failed
请告诉我我哪里犯了错误。
答案1
不要使用--net=host
。由于您提供了选项,所以看起来您正在要求docker发布端口-p 27017:27017
,但--net=host
要求Docker关闭所有网络隔离功能,包括端口发布。
Docker-for-windows 在 Hyperv 中设置了一个小型 VM,Docker 在其中运行。您的--net=host
容器最终会监听该 VM 的接口。Docker-for-windows 网络端口转发仅关注已发布的端口,因此不会发生转发。
如果你运行不带的相同命令--net=host
,你将得到不同的结果。
有时,如果您尝试运行容器化进程,而发布的端口似乎不起作用,那是因为该进程正在监听容器的lo0
接口而不是eth0
接口。
这是一个可以用来测试发布端口的很好的基准测试容器:
docker run --name testweb -d -p 8989:80 nginx:alpine
然后你就可以连接到http://127.0.0.1:8989并查看 nginx 欢迎页面。