在尝试将包含简单流式应用程序的Docker映像部署到Heroku时,我遇到了一些麻烦的问题。我的问题是,部署后我无法访问我的Docker。仔细观察,我发现了以下错误:
错误R10(引导超时)-> Web进程在启动后60秒内未能绑定到$ PORT
我已经研究并了解到这是因为该端口不可用,因为Heroku将动态分配端口号。
通过放置以下Dockerfile,我确保不会发生这种情况。
FROM python:3.7
COPY . /app
WORKDIR /app
RUN pip install streamlit
ENTRYPOINT ["streamlit","run", "--server.enableCORS", "false" ,"--server.port", "$PORT"]
CMD ["app.py"]
我现在可以看到网络URL和外部URL端口号是由Heroku分配的,因为它不是典型的5901号。
但是,令我困惑的是为什么容器无法绑定到给定的动态端口号?我以为该应用将使用给定的动态数字?
答案 0 :(得分:2)
问题在于,在Heroku Docker注册表上执行Docker运行时,$PORT
未被替换为相应的环境变量。
一种替代方法是创建一个调用.sh脚本的Docker文件
FROM python:3.7
COPY . /app
WORKDIR /app
RUN pip install streamlit
ENTRYPOINT "/startup.sh"
和startup.sh
echo PORT $PORT
streamlit run --server.enableCORS false --server.port $PORT app.py