我已经将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 && \
也尝试了网桥无济于事。 docker compose示例
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
答案 0 :(得分:0)
问题可能是由于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