我有一个简化的应用程序(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/

10-15 23:41