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 守护进程

无法从 docker-compose 连接到 docker

docker-compose 有两个容器:web 无法连接到 db

无法从主机连接到 dockerised Vue CLI 服务