【发布时间】:2019-05-24 04:09:33
【问题描述】:
我有一个 dockerized 的 nodejs 应用程序,需要一个复制的 MongoDB 数据库。我已经在 docker-compose 中构建了我复制的 MongoDB,并且工作得很好。如果我运行命令docker inspect MongoDB-primary |grep IPAddress 它的打印:
"IPAddress": "",
"IPAddress": "172.18.0.2",
现在在我的应用程序中,我将此 ip 作为 mongoconnection 字符串(当然带有协议名称)但应用程序无法连接到 MongoDB 并抛出此错误消息(应用程序也是 docker 容器):
message: 'failed to connect to server [172.18.0.2:27017] on first connect [MongoNetworkError: connection 1 to 172.18.0.2:27017 timed out]',
这是我的 mongodb docker compose 文件:
version: '2'
services:
mongodb-primary:
image: 'bitnami/mongodb:latest'
environment:
- MONGODB_REPLICA_SET_MODE=primary
volumes:
- 'mongodb_master_data:/bitnami'
mongodb-secondary:
image: 'bitnami/mongodb:latest'
depends_on:
- mongodb-primary
environment:
- MONGODB_REPLICA_SET_MODE=secondary
- MONGODB_PRIMARY_HOST=mongodb-primary
- MONGODB_PRIMARY_PORT_NUMBER=27017
mongodb-arbiter:
image: 'bitnami/mongodb:latest'
depends_on:
- mongodb-primary
environment:
- MONGODB_REPLICA_SET_MODE=arbiter
- MONGODB_PRIMARY_HOST=mongodb-primary
- MONGODB_PRIMARY_PORT_NUMBER=27017
volumes:
mongodb_master_data:
driver: local
而我的节点 js 应用程序 dockerfile 是:
FROM node:6.0
# Create app directory
WORKDIR /usr/src/app
# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./
RUN npm install
# If you are building your code for production
# RUN npm install --only=productio
# Bundle app source
COPY . .
EXPOSE 3001
CMD [ "npm", "start" ]
我该如何解决这个问题?
【问题讨论】:
-
欢迎了解更多详情。至少
docker run命令和更好的Dockerfile -
@grapes 我编辑了我的问题。
-
您可能需要为容器提供端口映射,您确定这样做了吗
-
@grapes 当我输入
mongo 172.18.0.2时,它连接到主要的 mongo 实例,没有任何错误。我希望其他容器应该以这种方式连接,但应用程序不能。 -
您试图从哪里运行应用程序?您永远不应该将该内部 IP 地址用于任何事情(甚至查找它),如果您重建容器并且无法从主机外访问,它可能会发生变化。