【问题标题】:Issues with docker码头工人的问题
【发布时间】:2021-04-12 10:19:16
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答,但问题仍未解决。我按照您的建议更改了代码,但容器仍在随机端口上运行,目前在端口 49175 上,我真的不知道如何更改它。我什么都试过了
    • EXPOSE 在现代 Docker 中并没有真正做任何事情,这里也没有严格要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 2021-11-16
    相关资源
    最近更新 更多