Docker 只侦听端口 80

时间:2021-07-29 13:48:52

标签: docker fastapi docker-run

我正在学习 docker,我正在测试正在运行的容器。仅当我运行侦听端口 80 的容器时,它才能正常工作。

示例:

工作正常:

docker run -d --name fastapicontainer_4 -p **8090**:80 fastapitest
docker run -d --name fastapicontainer_4 -p **8050**:80 fastapitest

不能正常工作:

docker run -d --name fastapicontainer_4 -p **8050**:**8080** fastapitest

当我更改程序在容器中侦听的端口并放置一个与 80 不同的端口时,该页面不起作用。有人知道是否可以使用与 80 不同的端口?我该怎么做?我正在使用 fastapi。

谢谢, 吉列尔莫

3 个答案:

答案 0 :(得分:2)

-p 参数的语法是 <host port>:<container port>。您可以将主机端口设为任意值,Docker 会安排它重定向到容器端口,但是您不能将容器端口设置为任意值。容器中需要有一个服务监听那个端口。

因此,如果容器中的 Web 服务器在端口 80 上运行,则 <container port> 选项的 -p 部分必须始终为 80,除非您更改 Web 服务器配置侦听不同的端口。

答案 1 :(得分:0)

你在做什么:

docker run -d --name fastapicontainer_4 -p 8050:8080 fastapitest

说明:这样做是将 Host 端口 8050 转发到 container 端口 8080。如果您的 fastapi 服务未侦听端口 8080,连接将失败。

主机 8050 -> 容器 8080

正确的做法:

docker run -d --name fastapicontainer_4 -p 8080:80 fastapitest

说明:这是将 host 端口 8080 转发到 container 端口 80

主机 8080 -> 容器 80

注意:当您共享一个端口时,Docker 不会验证连接,它只是打开门,这样您就可以使用该开放端口做任何您想做的事情,因此即使您的服务没有在该端口上侦听,docker 也不会'不在乎。

答案 2 :(得分:0)

您需要指定要用于运行 fastapi 的客户端口。 例如

uvicorn.run(app, host="0.0.0.0", port=8050)

现在,如果您在主机上运行映射 8050(或任何其他)端口,容器上为 8050,它应该可以工作:

docker run -d --name fastapicontainer_4 -p 8050:8080 fastapitest
相关问题