gpt4 book ai didi

Docker - 无法在端口 80 上公开

转载 作者:行者123 更新时间:2023-12-05 04:54:07 27 4
gpt4 key购买 nike

我在 Docker 上公开我的 .Net Core 应用程序时遇到问题。

我的 Dockerfile 就是这样开始的

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-bionic AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-bionic AS build
WORKDIR /src

我构建并运行:

docker run -d -p 8080:80 --name test testapp

容器启动但我无法访问端口 8080 上的应用程序

在容器日志中我可以看到

warn: Microsoft.AspNetCore.Server.Kestrel[0]

Unable to bind to http://localhost:5000 on the IPv6 loopback interface: 'Cannot assign requested address'.

info: Microsoft.Hosting.Lifetime[0]

Now listening on: http://localhost:5000

但我期待:

Now listening on: http://[::]:80

为什么不明白为什么这不是 80 并且我无法从外部访问我的应用程序,即使使用 8080:5000 运行也是如此

从容器内部到 localhost:5000 的 CURL 返回正确的 HTML

最佳答案

您可以使用 ASPNETCORE_URLS 环境变量告诉 Kestrel 监听不同于 localhost:5000 的主机/端口。

docker run -d -p 8080:80 -e ASPNETCORE_URLS=http://+:80 --name test testapp

有关这方面的更多信息,请参阅 the docs .

现在,根据我的经验,如果我有入口点/cmd 来执行 dotnet run,我需要设置此环境变量。另一方面,如果我将它设置为使用 DLL,即 CMD ["dotnet", "testapp.dll"],它会监听默认为 0.0.0.0:80,这意味着我不必设置 ASPNETCORE_URLS 变量。

因此您还可以尝试使用您的入口点/cmd。我找不到这部分的文档,所以不确定它到底是如何工作的......

关于Docker - 无法在端口 80 上公开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65874629/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com