【发布时间】:2023-04-11 03:39:02
【问题描述】:
我正在尝试用两个容器编写 docker 应用程序:
- 蒙哥
- 应用程序
Mongo 容器工作正常,同时应用无法连接到 mongo。 node.js app 和 mongostat 都不能。奇怪的是,我尝试在两台装有 Win10 的计算机上运行这个项目,而在另一台计算机上运行正常。
当我从应用容器运行 node app.js 或 mongostat --uri "mongodb://mongo:27017/project" 时,这些是来自 mongo 容器的日志:
2019-05-22T09:33:52.225+0000 I NETWORK [conn17] received client metadata from 192.168.96.2:42916 conn17: { driver: { name: "nodejs", version: "3.1.10" }, os: { type: "Linux", name: "linux", architecture: "x64", version: "4.9.125-linuxkit" }, platform: "Node.js v10.15.3, LE, mongodb-core: 3.1.9" }
2019-05-22T09:33:52.231+0000 I NETWORK [conn17] end connection 192.168.96.2:42916 (0 connections now open)
这意味着两个容器可以互相看到,所以 .yml 文件应该没问题。如果问题出在代码上,那么它不应该在两台计算机上工作。
Dockerfile:
FROM node:10.15.3-alpine
RUN apk update && apk --no-cache --virtual build-dependencies add python make g++ && apk del build-dependencies
RUN mkdir -p /home/node/app && chown -R node:node /home/node/app
WORKDIR /home/node/app
COPY package*.json ./
USER node
COPY --chown=node:node . .
ENV NPM_CONFIG_PREFIX=/home/node/.npm-global
RUN npm install
EXPOSE 3000
CMD ["node", "app.js"]
docker-compose.yml:
version: "3.5"
services:
app:
container_name: app
restart: always
build: .
ports:
- "3000:3000"
networks:
- mongo
mongo:
restart: always
container_name: mongo
image: mongo
expose:
- 27017
volumes:
- mongodata:/data/db
ports:
- '27017:27017'
networks:
- mongo
volumes:
mongodata:
networks:
mongo:
external: true
来自 app.js 的 sn-p:
MongoClient.connect('mongodb://mongo:27017/project', {useNewUrlParser: true}, (err, client) => {
if (err) throw err; //throws MongoNetworkError: failed to connect to server [mongo:27017] on first connect [MongoNetworkError: getaddrinfo ENOTFOUND mongo mongo:27017]
console.log("connected");
client.close();//at the moment this line is not being reached because of throw err;
});```
【问题讨论】:
标签: node.js mongodb docker docker-compose