Docker 容器端口设置不正确
Docker container ports setup incorrectly
我想 docker 处理一个简单的应用程序。这是一个简单的 API,当我 运行 它在我的机器上时可以正常工作,并且可以在 http://127.0.0.1:8000/ 上访问
这是我创建的docker文件
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 运行 -d -p 8000:8000 test
问题是我无法访问它http://127.0.0.1:8000/ 即使我不知道这个问题
PS:当我检查我的容器端口时,我得到 0.0.0.0:8000->8000/tcp, ::8000->8000/tcp
我想知道导致此问题的原因以及解决方法。
- 尝试访问 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
默认情况下 uvicorn
监听 127.0.0.1
。 127.0.0.1
容器内部是私有的,不参与portforwarding。
解决方法是uvicorn --host 0.0.0.0
,例如:
CMD ["uvicorn", "main:app", "--reload", "--host", "0.0.0.0"]
有关为什么会出现这种情况的解释以及图表,请参阅 https://pythonspeed.com/articles/docker-connection-refused/
我想 docker 处理一个简单的应用程序。这是一个简单的 API,当我 运行 它在我的机器上时可以正常工作,并且可以在 http://127.0.0.1:8000/ 上访问 这是我创建的docker文件
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 运行 -d -p 8000:8000 test
问题是我无法访问它http://127.0.0.1:8000/ 即使我不知道这个问题
PS:当我检查我的容器端口时,我得到 0.0.0.0:8000->8000/tcp, ::8000->8000/tcp
我想知道导致此问题的原因以及解决方法。
- 尝试访问 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
默认情况下 uvicorn
监听 127.0.0.1
。 127.0.0.1
容器内部是私有的,不参与portforwarding。
解决方法是uvicorn --host 0.0.0.0
,例如:
CMD ["uvicorn", "main:app", "--reload", "--host", "0.0.0.0"]
有关为什么会出现这种情况的解释以及图表,请参阅 https://pythonspeed.com/articles/docker-connection-refused/