Docker 容器端口访问

Docker Container port access

我已经从现有的 dotnet 应用程序创建了一个图像,我可以在本地 运行。

在我的 docker 文件中 EXPOSE 5000

在 docker 中撰写: ports: [5000:5000]

我使用以下命令启动容器: docker run -d -p 5000:5000 --name my-reports my-reports:latest

运行使用 docker ps 命令:

     NAMES
106c4929c0d6   my-reports:latest   "dotnet my-reports"   8 minutes ago   Up 8 minutes   0.0.0.0:5000->5000/tcp   my-reports

入口点的输出:

info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
      Content root path: C:\app

netstat 显示:

C:\app>netstat -a

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    0.0.0.0:135            106c4929c0d6:0         LISTENING
  TCP    0.0.0.0:5985           106c4929c0d6:0         LISTENING
  TCP    0.0.0.0:47001          106c4929c0d6:0         LISTENING
  TCP    0.0.0.0:49152          106c4929c0d6:0         LISTENING
  TCP    0.0.0.0:49153          106c4929c0d6:0         LISTENING
  TCP    0.0.0.0:49154          106c4929c0d6:0         LISTENING
  TCP    0.0.0.0:49155          106c4929c0d6:0         LISTENING
  TCP    0.0.0.0:49160          106c4929c0d6:0         LISTENING
  TCP    127.0.0.1:5000         106c4929c0d6:0         LISTENING

但是我尝试通过 localhost:5000

从我的机器访问端口时超时

您已经提供标志 --name my-reports,但您的容器将名称报告为“vpi-harmony-reports”。一定要杀死容器和 re-run docker 命令。还要确保你没有防火墙阻止 5000 端口。

您的问题是您的应用在 localhost 上侦听。这仅在容器内可用。

您需要让您的应用在 public 网络接口上进行侦听。通过使用 0.0.0.0 作为 IP 最容易实现,这使得它在所有接口上侦听。

在您的情况下,让应用在 0.0.0.0:5000 上侦听。