我有一个简化的应用程序(localhost:8501)
和一个API (127.0.0.1:8000)
。
我的精简应用程序尝试访问API。
当我启动命令以启动“streamlit”时,它运行良好。但是当streamlit在Docker容器中时,我无法访问URL。我有这个错误:
ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=8000): Max retries exceeded with url: /predict (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f2a5ebae090>: Failed to establish a new connection: [Errno 111] Connection refused'))
这是我的dockerfile:FROM tiangolo/uvicorn-gunicorn:python3.7
ENV PYTHONPATH .
RUN mkdir /streamlit
COPY requirements.txt /streamlit
WORKDIR /streamlit
RUN pip install -r requirements.txt
COPY . /streamlit
EXPOSE 8501
CMD ["streamlit", "run", "web/source/web_api.py"]
和我启动的命令:docker build --tag web_streamlit.
docker run --publish 8501:8501 --detach --name web_streamlit_container web_streamlit
最佳答案
要访问正在运行的服务,您必须具有适用于mac和window的特殊DNS。host.docker.internal
,解析为主机使用的i 内部IP地址。
因此,将localhost:8000
替换为host.docker.internal:8000
special DNS for mac and window
或者,如果您是Linux,则设置host
来为您自己解析特殊的DNS。
其中docker run --publish 8501:8501 -it --rm --add-host="host.docker.internal:192.168.9.100" --name web_streamlit_container web_streamlit
192.168.9.100
是您可以在Linux中使用ifconfig
获得的主机IP。
因此,您有了灵活的DNS,它将在所有平台Linux,window和mac上都可以使用,您无需修改代码。
关于python - 在使用dockerFile启动我的机器上运行Streamlit时无法向127.0.0.1:8000发出请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63035755/