docker 容器无法连接到 localhost mongodb

M.Y*_*efi 1 mongodb node.js meteor docker

A. 我有一个容器,其中包含以下
1.NodeJS版本 8.11.4
2.Rocketchat流星应用程序

B、这是我的 Dockerfile

FROM node:8.11.4
ADD . /app
RUN npm install -g node-gyp
RUN set -x \
  && cd /app/programs/server/ \
  && npm install \
  && npm cache clear --force
WORKDIR /app/
ENV PORT=3000 \
    ROOT_URL=http://localhost:3000
EXPOSE 3000
CMD ["node", "main.js"]

Run Code Online (Sandbox Code Playgroud)

C、这条命令执行得很好

docker build -t memo:1.0 .

Run Code Online (Sandbox Code Playgroud)

当我尝试运行容器时,它在容器日志中遇到以下错误

{"log":"MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]\n","stream":"stderr","time":"2019-01-24T21:56:42.222722362Z"}

Run Code Online (Sandbox Code Playgroud)

所以容器不能被执行。在mongodb运行和我已经添加到0.0.0.0bindIpmongod.conf的文件。

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,0.0.0.0  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
Run Code Online (Sandbox Code Playgroud)

My mongodbis installed in host(outside the container)
问题没有解决,我的容器状态是 Exited

我把IP而不是本地主机,但它遇到以下错误

{"log":"MongoNetworkError: failed to connect to server [192.168.0.198:27017] on first connect [MongoNetworkError: connect EHOSTUNREACH

Run Code Online (Sandbox Code Playgroud)

two*_*new 6

这里的问题是您正在启动一个 docker 容器(一个自包含的环境),然后尝试访问localhost:27017. 但是,容器的 localhost 与容器(主机上)的localhost 不同。从这一点可以采取两种方法:

  • 不要尝试连接到localhost:27017,而是连接到主机的 ip(类似于 192.xxx 或 10.xxx)
  • (更好的选项imo)dockerize您的mongodb,然后您的服务将能够使用docker dns相互通信。为此,您将创建docker-compose.yml一个服务,其中一个服务是您的应用程序,另一个是 mongodb。

  • 尝试将 `--net=host` 添加到您的运行命令中 (3认同)