【问题标题】:Dockerizing .NET Core app doesn't give the same output?Dockerizing .NET Core 应用程序不会提供相同的输出?
【发布时间】:2025-12-11 00:00:01
【问题描述】:

我是 docker 新手,我正在尝试 dockerizing 一个 .NET 核心应用程序,当我在没有实时服务器的情况下运行它时编译的应用程序应该会出现此错误。

我用来为这个应用构建镜像的 dockerfile 是

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env

WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o bin


WORKDIR /app/bin

ENTRYPOINT ["dotnet", "Rescue.Bridge.dll"]

运行容器时的输出是

我的问题是我无法弄清楚缺少/错误的内容,因此我可以在没有 docker 的情况下获得与编译版本相同的输出?

【问题讨论】:

  • 您似乎正在尝试绑定到 docker 容器中不存在的网络地址。您可以考虑绑定到0.0.0.0 看看是否有任何变化?
  • 在 appsettings.json 中的 IP 设置是 "RescueBridge": { "IPAddress": "192.168.4.1", "Port": 6005 },您是否建议将其更改为 0.0.0.0 和重建图像?
  • 这是监听端口?是的,改成0.0.0.0,端口6005,监听器就会绑定到容器中的所有地址。
  • 192.168.4.155:0 好像不正确

标签: docker .net-core dockerfile


【解决方案1】:

当涉及到容器时,您不应绑定特定的IP 地址,否则您将无法访问您的应用程序。

将此添加到 Dockefile 以侦听所有接口。

ENV ASPNETCORE_URLS http://+:6005

您将能够从容器外部访问应用程序。

或者你可以更新appsettings.json中的URL

  "App": {
    "APIURL": "http://0.0.0.0:6005/"
  },

【讨论】:

  • 我将这一行添加到我的docker文件并重新构建了图像,问题仍然存在
  • 您需要在您的 docker 容器外公开端口,例如“6005”,并将其绑定到本地机器端口。最简单的方法是使用 Kitematic.exe 并检查容器上的端口并将其绑定到容器实例的设置选项卡中的本地计算机端口
【解决方案2】:

问题出在编译版本中,而不是在 dockerized 版本中,“System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (49): Can't assign requested address 127.0.0.1:0

当我更改连接设置时,一切正常。

【讨论】:

    最近更新 更多