node.js - Dockerized React 应用程序无法绑定(bind)到 Heroku 上的 $PORT

标签 node.js reactjs docker heroku web-deployment

我正在尝试将 Dockerized React 应用程序部署到 Heroku,但不断收到

"R10: Failed to bind to $PORT error on Heroku"

当我在本地运行 docker 化的应用程序时,它运行得非常好。

我的 docker 文件如下所示:

FROM node:10.15.3
RUN mkdir -p /app
WORKDIR /app
COPY . .

ENV PATH /app/node_modules/.bin:$PATH
COPY package.json /app/package.json
RUN npm install --verbose
RUN npm install serve -g -silent

# start app
RUN npm run build
CMD ["serve", "-l", "tcp://0.0.0.0:${PORT}", "-s", "/app/build"]

我按照在线解决方案将服务上的“监听”端口从 Heroku 更改为 $PORT。现在,根据日志,应用程序已在 Heroku 的端口上提供服务,但仍然获取

"Failed to bind to $PORT error"

请帮忙!

最佳答案

CMD 中不会发生变量替换,这就是为什么 ${PORT} 被视为文本而不是消耗其值。

与 shell 形式不同,exec 形式不调用命令 shell。这意味着不会发生正常的 shell 处理。例如,CMD [ "echo", "$HOME"] 不会对 $HOME 进行变量替换。如果您想要 shell 处理,则可以使用 shell 形式或直接执行 shell,例如:CMD [ "sh", "-c", "echo $HOME"]。当使用exec形式直接执行shell时,就像shell形式一样,是shell在做环境变量扩展,而不是docker。

docker-cmd

将 CMD 更改为

CMD ["sh", "-c", "serve -l tcp://0.0.0.0:${PORT} -s /app/build"]

关于node.js - Dockerized React 应用程序无法绑定(bind)到 Heroku 上的 $PORT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59497283/

相关文章:

docker - 如何在 Docker 中安装 Aerospike 工具?

javascript - 如果我在特定的主体类上引用它,CSS 模块声明将不起作用

javascript - Sails.js 延迟加载模型

javascript - 如何将html <select>框值传递到 Electron 中的另一个js文件中

JavaScript:浏览器支持 vs 纯语言支持:setTimeout、setInterval

reactjs - 每次有人使用 firebase 和 Reactjs 访问页面时计算浏览次数

javascript - 如何通过map函数将函数属性传递给子/孙子? (并从状态中删除项目)

docker - 如何登录jfrog容器注册中心?

docker - Traefik v2和带路径的路由

node.js - 如何将集合名称放入 Mongoose 模型中