我正在尝试将 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。
将 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/