docker容器无法连接到localhost mongodb

时间:2019-01-24 22:40:07

标签: node.js mongodb docker meteor

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"]

C。这个命令执行得很好

docker build -t memo:1.0 .

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

{"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"}

因此无法执行容器。 mongodb正在运行,我已经在bindIp文件中的mongod.conf中添加了0.0.0.0。

# 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.

我的mongodb已安装在主机中(容器外部)
问题没有解决,我的容器状态为退出

我用IP代替了本地主机,但是遇到以下错误

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

2 个答案:

答案 0 :(得分:2)

这里的问题是,您正在启动Docker容器(一个自包含的环境),然后尝试到达localhost:27017但是,本地主机内部与您的容器外部(在主机上)不同。从这一点出发,您可以采用两种方法:

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

答案 1 :(得分:1)

  • 尝试使用MONGO_URL=mongodb://192.168.0.198:27017/rocketchat时,还要将该IP添加到bindIp
  • 使用本地主机MONGO_URL=mongodb://127.0.0.1:27017/rocketchat

我还建议在mongo config中启用安全授权。然后为数据库设置用户和密码。

请记住,对配置文件的任何更改都需要重启mongo