码头工人的问题

时间:2021-04-12 10:19:16

标签: c# docker dockerfile containers visual-studio-2019

我在将 docker 用于 C# 应用程序时遇到了很多问题。

这是我遇到的第一个问题:我需要在端口 8080 上运行的 docker 容器中运行图像。我已经尝试了 Visual Studio 2019 中的所有内容,但找不到让它在端口 8080 上运行的方法。基本上当我点击播放按钮时,它会忽略 dockerfile 的 EXPOSE 8080/tcp 条目并在随机端口上的容器中运行图像。

我尝试使用“docker run -d -p 8080:80 aspnetapp”从命令行运行图像,其中“aspnetapp”是图像的名称。一切似乎都很好,在 Docker Desktop 中,我可以看到它试图在端口 8080 上运行,但容器退出时出现错误代码 0。

当我从 Visual Studio 运行时一切正常,但我无法更改为端口 8080。

这是我的 dockerfile:

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 8080/tcp
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["ProductDirectory.csproj", "."]
RUN dotnet restore "./ProductDirectory.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "ProductDirectory.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "ProductDirectory.csproj" -c Release -o /app/publish
EXPOSE 8080/tcp

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "ProductDirectory.dll"]

1 个答案:

答案 0 :(得分:0)

在 Dockerfile 中使用多个阶段是个好主意。 但是你应该小心,因为 Docker 只需要你 dockerfile 的最新部分,在你的情况下它只需要这部分:

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "ProductDirectory.dll"]

您没有为应用程序定义端口的地方。 要解决此问题,只需添加 EXPOSE 端口并为此部分指定您的端口,如下所示:

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
EXPOSE 8080
ENTRYPOINT ["dotnet", "ProductDirectory.dll"]

我希望这可以帮助您解决问题。