node.js - Nodejs应用程序docker无法连接到mongodb docker容器
问题描述
我有一个nodejs
dockerized 的应用程序,需要一个复制的 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-compose
不会自动将 tcp 端口暴露给外部世界,例如您的主机 PC(我假设您nodeJs
在主机上运行并且不包含在 中docker-compose
)。这是 的行为docker bridge networks
,您可以在https://docs.docker.com/network/bridge/阅读更多内容
您必须执行以下操作之一:
将您的 NodeJs 容器包含到docker-compose
或者
暴露端口docker-compose.yml
推荐阅读
- c - 返回书名、价格和页数的程序
- vue.js - 在ag grid vue中发出过滤的行数
- regex - 正则表达式:匹配包含不超过三个连续 B 的字符串(不使用负前瞻)
- c - 使用 C 逐行读取多个 .txt 文件的某些列
- python - 如何在找到父 div 的同时找到子元素?
- slack-api - 如何通过永久链接标识的 API 检索 Slack 消息?
- python - BeautifulSoup - 没有类的刮桌子
- javascript - 将 Apollo React onError 从 apollo-link-error 添加到链接 const
- java - 如何逐字在TextView上附加文本android
- cygwin - 在 Cygwin 中安装 cp2k