在本地计算机上使用 docker 运行或运行到 kubernetes 时,无法访问 asp .net core 应用程序

Tom*_*ker 2 c# docker kubernetes asp.net-core

我有一个非常简单的 asp.net core 应用程序(支持 Linux 的 Docker 支持的 C# Web 应用程序),当我构建 docker 映像并尝试在本地 PC 上运行它时,会发生以下情况;\n在 docker 中,我的映像名为 test,我输入 docker run test,此时它会显示“内容根路径:/app 现在正在监听:http://[::]:80 ”\n即使当我输入 docker ps 时,我也可以看到进程正在运行,当我尝试导航到 localhost:80 我得到的只是漫长的等待,然后“此站点可以\xe2\x80\x99t 到达,本地主机拒绝连接。”

\n\n

我输入了

\n\n

docker inspect -f \'{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}\' ec158cc3b344

\n\n

这给了我容器的IP地址,但即使直接导航到容器,如果我在端口80上导航,我也会得到“这个站点可以\xe2\x80\x99t被访问\n”,或者如果我尝试“你的连接被中断”直接访问IP。

\n\n

我还尝试完全跳过 docker 并将映像部署到 Kubernetes,看看这是否会给我带来任何运气,但是当我尝试访问服务外部 IP(在本例中为 localhost)时,我得到以下信息\n"此页面\xe2\x80\x99t 无法工作,本地主机未\xe2\x80\x99t 发送任何数据。”

\n\n

我也尝试使用

\n\n

kubectl get pods -o wide

\n\n

并直接访问 Pod 的 IP,但这只是给我“这个 10.1.0.32 页面可以\xe2\x80\x99t 被发现”,例如。

\n\n

如果您想知道,这是我的 dockerfile 和 kubernetes 部署 .yml

\n\n
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base\nWORKDIR /app\nEXPOSE 80\n\nFROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build\nWORKDIR /src\nCOPY ["Test/Test.csproj", "Test/"]\nRUN dotnet restore "Test/Test.csproj"\nCOPY . .\nWORKDIR "/src/Test"\nRUN dotnet build "Test.csproj" -c Release -o /app\n\nFROM build AS publish\nRUN dotnet publish "Test.csproj" -c Release -o /app\n\nFROM base AS final\nWORKDIR /app\nCOPY --from=publish /app .\nENTRYPOINT ["dotnet", "Test.dll"]\n
Run Code Online (Sandbox Code Playgroud)\n\n
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: test\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: test\n  template:\n    metadata:\n      labels:\n        app: test\n    spec:\n      containers:\n      - name: test\n        image: <DockerEndpoint>.io/test:v5 #Sorry, can\'t include the real endpoint!\n        ports:\n        - containerPort: 8080\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: test\nspec:\n  type: LoadBalancer\n  ports:\n  - port: 80\n    targetPort: 8080\n  selector:\n    app: test\n
Run Code Online (Sandbox Code Playgroud)\n\n

我还了解到 .net core 以奇怪的方式工作,除非你告诉它,否则不允许它向外界公开其端口,但这与我对 docker/kubernetes 堆栈的相对陌生相结合,让我感到困惑。

\n\n

有谁知道我如何制作一个 .net core 应用程序,任何应用程序,与 docker 一起工作?

\n\n

PS 我真的使用这样一个简单的应用程序,即使我创建一个带有 docker 支持的全新 .net core 应用程序,并尝试立即构建和运行基本的 .net core 应用程序,它也不起作用。我无法让它与任何 .net core 应用程序一起工作!

\n

Chr*_*att 5

当它说监听时http://[::]:80,它正在谈论容器中的本地主机。http://localhost当您尝试通过计算机上运行的网络浏览器访问它时,localhost是您的计算机,而不是容器。您需要使用容器的IP。

从您的描述来看,听起来您也尝试过这样做,但您没有理由对此有任何问题。您要么没有获得正确的 IP,要么您做了其他不正确的事情(此处未详细说明)。