Issues with docker



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

这是我遇到的第一个问题:我需要在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端口。

这是我的档案:

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"]

在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"]

我希望这能帮助你解决你的问题。

最新更新