Node.js 用于部署的侦听端口,nodejs docker
我有一个简单的node.js-express应用程序,我将监听端口设置为3000。 在Dockerfile上,我公开端口3000并使用Node.js 用于部署的侦听端口,nodejs docker,node.js,docker,express,heroku,deployment,Node.js,Docker,Express,Heroku,Deployment,我有一个简单的node.js-express应用程序,我将监听端口设置为3000。 在Dockerfile上,我公开端口3000并使用-p3000:3000运行容器 我想使用我的docker映像在Heroku上部署我的应用程序,正确的方法是什么 我知道在这些情况下,我们使用process.env或在.env文件中指定一个全局变量 我在我的Dockerfile下面列出 FROM node:10-alpine as builder ARG NODE_ENV=production ENV NODE_
-p3000:3000
运行容器
我想使用我的docker映像在Heroku上部署我的应用程序,正确的方法是什么
我知道在这些情况下,我们使用process.env
或在.env
文件中指定一个全局变量
我在我的Dockerfile下面列出
FROM node:10-alpine as builder
ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}
RUN apk --no-cache add python make g++
COPY package*.json ./
RUN npm install --only=production
# RUN npm ci --only=production
FROM node:10-alpine
WORKDIR /usr/src/app
COPY --from=builder node_modules node_modules
COPY . .
EXPOSE 3000
CMD [ "npm", "run", "start:prod" ]
处理这个问题的正确方法是什么?
另外,任何改进Dockerfile的建议都是非常受欢迎的。在Heroku上部署web应用程序时,他们会通过一个env变量告诉您哪个端口是免费的。您必须在源代码中绑定该端口。
在Dockerfile中,由于无法打开自定义端口,请删除
EXPOSE 3000
在源代码中,您必须编写类似于const-port=process.env.port | 3000的代码
因此,当您在本地执行程序而没有设置env var$PORT
时,它将打开端口3000。在Heroku上,它将打开$port
中指定的端口
在Heroku上部署时的一个常见障碍是URL不再工作。在本地运行时,您可能会有URL:http://localhost:3000/
但是在Heroku上你有:https://my-app.herokuapp.com/
https可能会引起一些头痛,因为您可能一直在使用http。此外,如果在主机名末尾硬编码端口,则会导致一些问题。Heroku会自动将主机名转换为ip地址+端口
您可以在此处阅读有关在Docker上部署的信息:
确保代码与Heroku兼容后,就可以开始执行Heroku Docker部署。这篇文章写得很透彻,我相信你读了比我把上面写的东西复制粘贴要好