【发布时间】:2021-11-22 14:27:45
【问题描述】:
我正在尝试在 Docker 中对我的 MERN 堆栈应用程序进行 docker 化,并且我能够使用带有 .yml 文件的 docker-compose 让所有服务在 docker 网络上的容器中运行,但由于某种原因,我的应用程序是无法连接到 mongo 服务。我能够让应用程序在我的本地主机上运行,但在 Docker 中,它无法运行。
Mongo 与后端 mongoose 的连接:
const mongoURI = `mongodb://${MONGOUN}:${MONGOPW}@mongodb:27018/names`;
mongoose.connect(mongoURI, { useUnifiedTopology: true, useNewUrlParser: true })
.then(() => {
console.log('mongo connection established');
})
.catch((error) => {
console.log(`mongo connect error on ${mongoURI}`);
console.log(error);
});
const db = mongoose.connection;
db
.then(() => {
console.log(`connected to mongoose`);
})
.catch((err) => {
console.log(`error connecting to mongoose`);
console.log(err);
});
docker-compose .yml 文件:
version: '3.1'
services:
app:
restart: always
build: .
ports:
- 3000:3000
links:
- mongodb
mongodb:
image: mongo
ports:
- 27018:27018
expose:
- "27018"
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: password
MONGO_INITDB_DATABASE: names
mongo-express:
image: mongo-express
ports:
- 8080:8081
depends_on:
- mongodb
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: admin
ME_CONFIG_MONGODB_ADMINPASSWORD: password
ME_CONFIG_MONGODB_SERVER: mongodb
restart: unless-stopped
Dockerfile:
FROM node:14-alpine
RUN mkdir -p /home/app
COPY . /home/app
WORKDIR "/home/app"
EXPOSE 3000
CMD ["npm", "start"]
Docker 终端中的错误消息:
app_1 | connected to mongoose
app_1 | mongo connect error on mongodb://admin:password@mongodb:27018/names
app_1 | MongooseServerSelectionError: connect ECONNREFUSED 192.168.48.2:27018
app_1 | at NativeConnection.Connection.openUri (/home/app/node_modules/mongoose/lib/connection.js:846:32)
app_1 | at /home/app/node_modules/mongoose/lib/index.js:351:10
app_1 | at /home/app/node_modules/mongoose/lib/helpers/promiseOrCallback.js:32:5
app_1 | at new Promise (<anonymous>)
app_1 | at promiseOrCallback (/home/app/node_modules/mongoose/lib/helpers/promiseOrCallback.js:31:10)
app_1 | at Mongoose._promiseOrCallback (/home/app/node_modules/mongoose/lib/index.js:1149:10)
app_1 | at Mongoose.connect (/home/app/node_modules/mongoose/lib/index.js:350:20)
app_1 | at Object.<anonymous> (/home/app/server/db/index.js:7:10)
app_1 | at Module._compile (internal/modules/cjs/loader.js:1085:14)
app_1 | at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
app_1 | at Module.load (internal/modules/cjs/loader.js:950:32)
app_1 | at Function.Module._load (internal/modules/cjs/loader.js:790:12)
app_1 | at Module.require (internal/modules/cjs/loader.js:974:19)
app_1 | at require (internal/modules/cjs/helpers.js:93:18)
app_1 | at Object.<anonymous> (/home/app/server/index.js:3:12)
app_1 | at Module._compile (internal/modules/cjs/loader.js:1085:14) {
app_1 | reason: TopologyDescription {
app_1 | type: 'Single',
app_1 | setName: null,
app_1 | maxSetVersion: null,
app_1 | maxElectionId: null,
app_1 | servers: Map(1) { 'mongodb:27018' => [ServerDescription] },
app_1 | stale: false,
app_1 | compatible: true,
app_1 | compatibilityError: null,
app_1 | logicalSessionTimeoutMinutes: null,
app_1 | heartbeatFrequencyMS: 10000,
app_1 | localThresholdMS: 15,
app_1 | commonWireVersion: null
app_1 | }
app_1 | }
我刚刚开始学习 Docker,所以我主要在网上查看教程和其他示例。不过我在这里遇到了障碍。
这里是回购:https://github.com/nickhanrahan/shareport
任何人都可以在这里指出正确的方向吗?任何帮助将不胜感激。
【问题讨论】:
标签: node.js mongodb docker mongoose docker-compose