问题描述
我正在尝试通过 Heroku 上的 Docker 容器在 express 和 Pm2 中部署一个简单的 nodejs 应用程序。
按照heroku定义的步骤,容器成功推送到heroku:
- heroku 容器:登录
- heroku 容器:push name-of-container -a name-of-herokuApp
- heroku container:release name-of-container -a name-of-herokuApp
- heroku ps:scale name-of-container=1 -a name-of-herokuApp
这是 heroku 的日志,显示运行图像和为进程分配一个 dyno 的成功 Container Deployment Log
这里是问题出现的时候:在访问应用程序路由时抛出 Heroku H14 错误,当进程没有 Dynos 时会发生这种情况,在我的情况下它有。 Error H14 Log
我没有想法,因为这个错误引发的原因。我知道这可能是一个愚蠢的错误 XD!
这是我的应用程序的代码:
const express = require('express')
const app = express()
//require('./database')
app.use(express.json())
app.use(express.urlencoded({ extended: false }))
console.log('App is Running,yaaaay')
app.get("/",(req,res) => {
res.send("OK")
})
app.listen(3000)
及其与 Pm2 一起运行:
"scripts": {
"dev": "nodemon ./src/app","start": "pm2-runtime ./src/app.js --watch --name WD-Bot"
},
另外,这里有我的 DockerFile。我是 Docker 的新手,所以我可能在这里搞砸了 T-T?
FROM node:12.18-alpine
ENV NODE_ENV=production
workdir /usr/src/app
copY ["package.json","package-lock.json*","npm-shrinkwrap.json*","./"]
RUN npm install
copY . .
EXPOSE 3000
CMD ["npm","start"]
解决方法
你做到了:
heroku container:push name-of-container -a name-of-herokuApp
您假设这是容器的名称。那是错误的。根据 https://devcenter.heroku.com/articles/container-registry-and-runtime#build-an-image-and-push 这是进程类型:
heroku container:push <process-type>
您收到的错误信息是:
ERROR H14:No web processes running
您将流程命名为 wd-bot
而不是 web
。
将您的进程类型更改为 web
后,您还必须正确绑定 $PORT
。请参阅:https://help.heroku.com/P1AVPANS/why-is-my-node-js-app-crashing-with-an-r10-error
但这是一个不同的话题,是一个新问题。