node.js - 在 Heroku 上使用 mongoDB 部署 Dockerized Node,找不到 mongo 地址
问题描述
我正在尝试在 Heroku 上部署我的 Node.js、express、mongoDB Dockerized。构建映像后,在 Heroku 日志中我看到:
2020-03-07T12:51:12.880526+00:00 heroku[web.1]: Starting process with command `npm start`
2020-03-07T12:51:16.087665+00:00 app[web.1]:
2020-03-07T12:51:16.087677+00:00 app[web.1]: > esemeny-back@1.0.0 start /usr/src/app
2020-03-07T12:51:16.087678+00:00 app[web.1]: > node server.js
2020-03-07T12:51:16.087678+00:00 app[web.1]:
2020-03-07T12:51:16.937790+00:00 app[web.1]: app error { Error: getaddrinfo ENOTFOUND mongo mongo:27017
2020-03-07T12:51:16.937806+00:00 app[web.1]: at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)
2020-03-07T12:51:16.937807+00:00 app[web.1]: name: 'MongoNetworkError',
2020-03-07T12:51:16.937807+00:00 app[web.1]: errorLabels: [ 'TransientTransactionError' ],
2020-03-07T12:51:16.937808+00:00 app[web.1]: [Symbol(mongoErrorContextSymbol)]: {} }
2020-03-07T12:51:16.948788+00:00 app[web.1]: npm ERR! code ELIFECYCLE
2020-03-07T12:51:16.949327+00:00 app[web.1]: npm ERR! errno 1
2020-03-07T12:51:16.951211+00:00 app[web.1]: npm ERR! esemeny-back@1.0.0 start: `node server.js`
2020-03-07T12:51:16.951445+00:00 app[web.1]: npm ERR! Exit status 1
2020-03-07T12:51:16.951838+00:00 app[web.1]: npm ERR!
2020-03-07T12:51:16.952103+00:00 app[web.1]: npm ERR! Failed at the esemeny-back@1.0.0 start script.
2020-03-07T12:51:16.952335+00:00 app[web.1]: npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
使用本地 docker-compose 一切正常,我可以从我的服务器连接到 mongo。
这是我的 Dockerfile:
FROM node:10
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 9000
CMD ["npm", "start"]
还有我的 docker-compose.yml
version: '3'
services:
mongo:
container_name: mongo
image: mongo
ports:
- '27017:27017'
app:
container_name: docker-node-mongo
restart: always
build: .
ports:
- '9000:3000'
links:
- mongo
最后,这是我来自 server.js 的猫鼬连接
mongoose
.connect('mongodb://mongo:27017/events_db', {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
useFindAndModify: false,
})
.then(() => {
app.listen(process.env.PORT, err => {
if (!err) {
log.info(`Server started on port ${process.env.PORT}`);
log.info(`Server mode: ${process.env.NODE_ENV}`);
}
});
})
.catch(err => {
log.error(err);
process.exit(1);
});
有任何想法吗?我试图将我的 mongo ip 添加到 Heroku 的配置变量中,但没有运气。
解决方案
推荐阅读
- delphi - 是否可以初始化函数引用的常量数组?
- c - 在没有预定义缓冲区的情况下使用 fgets()
- node.js - 防止在节点中按下 process.stdin 键
- android - 以编程方式从电子邮件客户端发送电子邮件后未收到回调
- elixir - 从子进程中获取受监督的子 ID
- firebase - 如何知道 Firestore 是否传播了新更新的安全规则?
- clips - 在 CLIPS 中获取规则体
- java - 如何在 Hibernate 中使用 @OneToOne 和 @Where?
- php - 如何在不访问电报机器人上的链接的情况下创建一个发出 http 请求的按钮
- html - 如何从spring boot中的设备列表中删除一个设备条目