【问题标题】:Why can i not find MSBuild in multi solution asp.net-core application within a docker container为什么我在 docker 容器内的多解决方案 asp.net-core 应用程序中找不到 MSBuild
【发布时间】:2019-09-10 22:18:57
【问题描述】:

我正在尝试将我的 asp.net-core 应用程序包含在一个 docker 容器中。当我使用 Microsoft-secret-store 保存凭据时,我需要在我的容器中运行 dotnet user-secrets 命令。应用程序在启动时需要读取这些凭据,因此我必须在启动应用程序之前运行该命令。在我的 Dockerfile 中尝试执行此操作时出现错误:

 ---> Running in 90f974a06d83
Could not find a MSBuild project file in '/app'. Specify which project to use with the --project option.

我尝试先构建我的应用程序,然后使用已经构建的 dll 构建一个容器,但这给了我同样的错误。我还尝试使用 ENTRYPOINT ["/bin/bash"] 连接到容器,然后在容器中环顾四周。似乎创建的 /app 文件夹不包含 .csproj 文件。我不确定这是否是一个错误。

我的 Dockerfile

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY ["Joinme.Facade/Joinme.Facade.csproj", "Joinme.Facade/"]
COPY ["Joinme.Domain/Joinme.Domain.csproj", "Joinme.Domain/"]
COPY ["Joinme.Business/Joinme.Business.csproj", "Joinme.Business/"]
COPY ["Joinme.Persistence/Joinme.Persistence.csproj", "Joinme.Persistence/"]
COPY ["Joinme.Integration/Joinme.Integration.csproj", "Joinme.Integration/"]
RUN dotnet restore "Joinme.Facade/Joinme.Facade.csproj"
COPY . .
WORKDIR "/src/Joinme.Facade"
RUN dotnet build "Joinme.Facade.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "Joinme.Facade.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
RUN dotnet user-secrets set "jwt:secret" "some_password"
ENTRYPOINT ["dotnet", "Joinme.Facade.dll"]

我的预期结果是设置了密码,因此我可以启动容器而不会崩溃。

【问题讨论】:

    标签: docker asp.net-core


    【解决方案1】:

    简单明了:操作失败是因为在这个阶段,没有user-secrets 命令需要的*.csproj 文件。但是,无论如何,这不是您应该做的事情,原因如下:

    1. 用户机密不用于生产。您可以同样轻松地,或者实际上更多轻松地在此处设置环境变量,而不需要 dotnet 或 SDK。

      ENV jwt:secret some_password
      
    2. 您实际上不应将机密存储在 Dockerfile 中,因为它会进入源代码控制,并以纯文本形式公开。使用 Docker secrets 或 Azure Key Vault 等外部提供程序。

    3. 无论如何,您都不想基于 SDK 构建最终映像。这将使您的容器映像巨大,这意味着进出容器注册表的传输时间更长,存储/带宽成本更高。如果您发布的是自包含的(即尽可能小),您的最终图像应该基于运行时,甚至是类似 alpine 的东西。

    【讨论】:

      猜你喜欢
      • 2017-08-14
      • 1970-01-01
      • 2018-04-16
      • 2021-10-29
      • 1970-01-01
      • 2020-09-26
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      相关资源
      最近更新 更多