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 应用程序在给定端口上通信?