Dockerized React App 无法绑定到 Heroku 上的 $PORT

Posted

技术标签:

【中文标题】Dockerized React App 无法绑定到 Heroku 上的 $PORT【英文标题】:Dockerized React App failed to bind to $PORT on Heroku 【发布时间】:2020-04-17 05:15:51 【问题描述】:

我正在尝试将 Dockerized React 应用程序部署到 Heroku,但继续获取

“R10: 无法绑定到 Heroku 上的 $PORT 错误”

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

我的 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 的端口上提供服务,但仍然得到 ​​p>

“未能绑定到 $PORT 错误”

请帮忙!

【问题讨论】:

【参考方案1】:

在 CMD 中不会发生变量替换,这就是为什么 $PORT 被视为文本而不是使用其值的原因。

与 shell 形式不同,exec 形式不调用命令 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"]

【讨论】:

以上是关于Dockerized React App 无法绑定到 Heroku 上的 $PORT的主要内容,如果未能解决你的问题,请参考以下文章

MongooseModule:无法连接到数据库。在带有 Mongo 的 dockerized Nestjs 应用程序上

dockerized postgres 和 dockerized Spring boot app

CORS 阻止来自 Dockerized React 项目的 API 调用

如何让两个 dockerized 应用程序在给定端口上通信?

无法将 dockerized spring boot 应用程序连接到 dockerized postgresql

在 dockerized 环境中无法从 Flask 连接到 Kafka