【问题标题】:Docker is only listening to port 80Docker 只监听 80 端口
【发布时间】:2021-07-29 13:48:52
【问题描述】:

我正在学习 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。

谢谢, 吉列尔莫

【问题讨论】:

  • 问题不是 docker 问题。正如您在前两个示例中看到的那样,端口映射工作正常。尝试在不使用 docker 的情况下运行 fastapi,看看是否可以正确配置它以侦听 80 以外的其他端口,然后移至容器。

标签: docker fastapi docker-run


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你在做什么:

    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 也不会'不在乎。

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-05-17
        • 2016-05-05
        • 2013-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-29
        • 1970-01-01
        相关资源
        最近更新 更多