Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 用于部署的侦听端口,nodejs docker_Node.js_Docker_Express_Heroku_Deployment - Fatal编程技术网

Node.js 用于部署的侦听端口,nodejs docker

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_

我有一个简单的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_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部署。这篇文章写得很透彻,我相信你读了比我把上面写的东西复制粘贴要好