Docker Compose API无法连接到主机MongoDB数据库

时间:2018-09-20 19:26:02

标签: docker docker-compose localhost

我已经将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

1 个答案:

答案 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 

(从此处复制:How to access host port from docker container

相关问题