Docker compose api无法连接到主机MongoDB数据库
Posted
技术标签:
【中文标题】Docker compose api无法连接到主机MongoDB数据库【英文标题】:Docker compose api cannot connect to host MongoDB database 【发布时间】:2019-02-25 04:04:25 【问题描述】:我已将我的 Mongodb 从容器移至本地服务(容器化时它真的很不稳定)。问题是我无法从 Node api 连接到本地运行的 MongoDB 服务。我可以在我的 Mac 上运行它,但不能在 Ubuntu 上运行。我试过了:
- DB_HOST=mongodb://172.17.0.1:27017/proto?authSource=admin
- DB_HOST=mongodb://localhost:27017/proto?authSource=admin
// this works locally, but not on my Ubuntu server
- DB_HOST=mongodb://host.docker.internal:27017/proto?authSource=admin
尝试将此添加到我的 docker 文件中:
ip -4 route list match 0/0 | awk 'print $3 "host.docker.internal"' >> /etc/hosts && \
还尝试了网桥,但无济于事。码头工人撰写示例
version: '3.3'
services:
search-api:
build: ../search-api
environment:
- PORT=3333
- DB_HOST=mongodb://host.docker.internal:27017/search?authSource=admin
- DB_USER=dbuser
- DB_PASS=password
ports:
- 3333:3333
restart: always
【问题讨论】:
host.docker.internal 仅适用于 Mac。不在任何 Linux 上,包括 Ubuntu。 docs.docker.com/docker-for-mac/networking/… 我得到了这个工作。错误是 Mongodb 未设置为侦听正确的 IP 地址。解决了这个问题,然后可以连接。 【参考方案1】:问题可能是由于 MongoDb 未侦听正确的 ip address 并因此阻止您的访问。
请确保您正在收听特定 ip 或全部收听:0.0.0.0
在 linux 上,配置文件默认安装在此处:/etc/mongod.conf
配置具体IP地址:
net:
bindIp: 172.17.0.1 #being your host's ip address
port: 27017
对所有连接开放的配置:
net:
bindIp: 0.0.0.0
port: 27017
获取您的主机 IP 地址(来自容器内)
在 docker-for-mac 和 docker-for-windows 上,您可以使用 host.docker.internal
在 linux 上,您需要在容器中运行 ip route show
。
在 Linux 上本地运行 Docker 时,您可以使用
docker0
接口的 IP 地址访问主机服务。从容器内部,这将是您的默认路线。例如,在我的系统上:
$ ip addr show docker0 7: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::f4d2:49ff:fedd:28a0/64 scope link valid_lft forever preferred_lft forever
在容器内:
# ip route show default via 172.17.0.1 dev eth0 172.17.0.0/16 dev eth0 src 172.17.0.4
(从这里复制:How to access host port from docker container)
【讨论】:
以上是关于Docker compose api无法连接到主机MongoDB数据库的主要内容,如果未能解决你的问题,请参考以下文章
我无法使用 DataGrip 数据库客户端从本地主机连接到 docker 中的 mysql
Docker 中的 web api 无法连接到主机上的 SQL Server,出现登录前握手错误
Docker-Compose 无法连接到 Docker 守护进程