无法在 Windows 主机上的 docker 中连接到 MongoDB

无法在 Windows 主机上的 docker 中连接到 MongoDB

我有一个类似的问题讨论无法在docker中连接到MongoDB

  • Windows 主机
  • Docker Toolbox,因此它使用 VirtualBox

我曾经docker run --name mongo2 -p 127.0.0.1:27017:27017 mongo创建过 MongoDB 容器。

当我连接到容器(docker -it mongo2 /bin/bash)时,我可以通过连接到 Mongo mongo localhost:27017

我也检查过网络状态Mongo 正在监听0.0.0.0:27017,不仅仅是本地主机。

但是,我还是无法从 Windows 主机连接到容器。我甚至尝试禁用 Windows 防火墙,但仍然没有结果:

rs@ausus:~$ telnet localhost 27017
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

有任何想法吗?

答案1

实际上,答案是在第一条评论中提供的(并且它为我解决了同样的问题),但是在答案部分中更容易找到它。

答案假设您正在使用 Docker Toolbox。


而不是运行:

docker run --name mongo2 -p 127.0.0.1:27017:27017 mongo

应运行以下命令:

docker run --name mongo2 -p <ip of boot2docker VM>:27017:27017 mongo

要获取<ip of boot2docker VM>虚拟机:

  1. 转到 VirtualBox --> 选择“默认”VM --> 单击“显示”按钮。
  2. 运行命令:docker-machine env
  3. VM 的 IP 将会出现在输出中。

答案2

就像 Docker 文档中说的https://hub.docker.com/_/mongo/:“这意味着无法运行将数据目录映射到主机的 MongoDB 容器”

最后,我编写了一个.bat脚本,定义我的 Win10 IP 并将其映射到变量。我直接在 Win10 上运行 MongoDB,然后使用 IP 访问它。这不是我想要的,但它有效。

启动.bat:

for /f "tokens=1-2 delims=:" %%a in ('ipconfig^|find "IPv4"') do set ip=%%b
set DOCKERHOST=%ip:~1%
docker-compose up

docker-compose.yml:

environment:
     - MONGO_HOST=${DOCKERHOST}

答案3

用这个:

host.docker.internal:27017

该功能已在 Windows 版 Docker Desktop 的最新版本上启用。

为了测试,您还可以 ping Docker 网络接口:

C:\>ping host.docker.internal
Pinging host.docker.internal [192.168.0.2] with 32 bytes of data:
Reply from 192.168.0.2: bytes=32 time<1ms TTL=128

引自文档

主机具有不断变化的 IP 地址(如果您没有网络访问权限,则没有)。我们建议您连接到特殊的 DNS 名称 host.docker.internal,该名称解析为主机使用的内部 IP 地址。这用于开发目的,不适用于 Docker Desktop for Windows 之外的生产环境。

“在生产环境中无法工作”听起来像是一个很大的缺点,但是如果这个基于 Linux 的容器在 Linux 下部署到云端,那么 DNS 名称无论如何都会改变,所以这是一个没有实际意义的观点。

相关内容