我有一個簡單的應用程式,我想對其進行 dockerize。這是一個簡單的 API,當我在我的機器上運行它時可以正常作業,并且可以在http://127.0.0.1:8000/上訪問 這是我創建的 dockerfile
FROM python:3.6-slim-stretch
WORKDIR /code
COPY requirements.txt /code
RUN pip install -r requirements.txt --no-cache-dir
COPY . /code
CMD ["uvicorn", "main:app", "--reload"]
然后我使用這個命令sudo docker build -t test創建影像。
然后以這種方式運行它sudo docker run -d -p 8000:8000 test
問題是我無法訪問它http://127.0.0.1:8000/即使我不知道問題
PS:當我檢查容器埠時,我得到 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp
我想知道是什么導致了這個問題以及如何解決它。
uj5u.com熱心網友回復:
默認情況下uvicorn偵聽127.0.0.1. 127.0.0.1容器內部是私有的,它不參與埠轉發。
解決方案是做uvicorn --host 0.0.0.0,例如:
CMD ["uvicorn", "main:app", "--reload", "--host", "0.0.0.0"]
有關為什么會出現這種情況的解釋,請參見圖表https://pythonspeed.com/articles/docker-connection-refused/
uj5u.com熱心網友回復:
- 嘗試訪問http://0.0.0.0:8000
- “我可以訪問它”是什么意思?你的許可被拒絕了嗎?404?你看到什么錯誤?
- 嘗試訪問容器內部:
$docker exec -it test bash并查看程式是否在其中運行:$curl http://0.0.0.0:8000。 - 嘗試使用容器的顯式 ip。獲取ip:
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' test
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/365523.html
下一篇:無法從瀏覽器訪問docker容器
