mongodb - 使用 docker-compose 重新启动容器时 MongoDB 未连接
问题描述
我正在尝试启动一个 docker 容器,该容器具有连接到 mongo 的应用程序。我正在关注 Brad Traversy 的 Docker 教程,因此代码仅来自他的 GitHub。现在我遇到的一个有趣的问题是,如果我启动一个全新的图像并启动它可以工作的容器。该应用程序部署,连接到 mongo,您可以向其添加数据,等等......
当我停止容器时(我只用 CTRL C、docker-compose down 和 docker desktop 尝试过)并尝试用 docker-compose up 再次启动它,它可能只工作 1/3 的时间。然后,如果我吹走图像并再次从头开始构建它,它就可以工作。停止容器并再次启动它,mongo 将无法连接给我以下错误:
docker-node-mongo | { MongoNetworkError: failed to connect to server [mongo:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 172.31.0.3:27017]
docker-node-mongo | at Pool.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/topologies/server.js:562:11)
docker-node-mongo | at Pool.emit (events.js:198:13)
docker-node-mongo | at Connection.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/connection/pool.js:316:12)
docker-node-mongo | at Object.onceWrapper (events.js:286:20)
docker-node-mongo | at Connection.emit (events.js:198:13)
docker-node-mongo | at Socket.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/connection/connection.js:245:50)
docker-node-mongo | at Object.onceWrapper (events.js:286:20)
docker-node-mongo | at Socket.emit (events.js:198:13)
docker-node-mongo | at emitErrorNT (internal/streams/destroy.js:91:8)
docker-node-mongo | at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
docker-node-mongo | at process._tickCallback (internal/process/next_tick.js:63:19)
docker-node-mongo | name: 'MongoNetworkError',
docker-node-mongo | message:
docker-node-mongo | 'failed to connect to server [mongo:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 172.31.0.3:27017]',
docker-node-mongo | errorLabels: [ 'TransientTransactionError' ],
docker-node-mongo | [Symbol(mongoErrorContextSymbol)]: {} }
这是我的 compose.yml、docker 文件和 index.js,它连接到 mongo(同样,都是直接从 Brad 那里提取的):
码头工人-compose.yml
version: '3'
services:
app:
container_name: docker-node-mongo
restart: always
build: .
ports:
- '80:3000'
external_links:
- mongo
mongo:
container_name: mongo
image: mongo
ports:
- '27017:27017'
Dockerfile
FROM node:10
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
索引.js
// Connect to MongoDB
mongoose
.connect(
'mongodb://mongo:27017/docker-node-mongo',
{ useNewUrlParser: true }
)
.then(() => console.log('MongoDB Connected'))
.catch(err => console.log(err));
有没有人见过这个并且知道为什么 mongo 在停止和启动容器后只连接一半时间?如果这很重要,我在使用 Big Sur 作为操作系统的 Mac 上。
解决方案
推荐阅读
- html - 如何放置
我在页面中有一些相互下方的图像,并希望在图像上垂直而不是水平添加跨度覆盖文本。我当前的代码水平显示(在 iPhone 屏幕上)跨度覆盖文本,但我想垂直显示它并从中读取自下而上。希望你们帮助我。谢谢
c++ - 架构 x86_64 的未定义符号:但有一个主要功能
- php - phpMyAdmin 4.6 持久登录
- java - 如何从数据库中选择第一行/第一行
- python - 为什么 numpy 的 sin 函数绘制直线图?
- python - 数据流 - 未调用函数 - 错误 - 未定义名称
- python-3.x - 用另一条线连接绘图的两个点
- node.js - 使用带有 json 标头的 curl 传递参数/传递用 ? 分隔的参数 在 NODE.JS 中
- javascript - 安装其他软件包时,runtime.js 文件总是被移动
- javascript - 引导程序 4 中的 col-md-4 属性在我的 ejs 文件中不起作用