程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了为 asp.net core 3.1 web 应用程序构建 docker 容器时解析目录名称的问题大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决为 asp.net core 3.1 web 应用程序构建 docker 容器时解析目录名称的问题?

开发过程中遇到为 asp.net core 3.1 web 应用程序构建 docker 容器时解析目录名称的问题的问题如何解决?下面主要结合日常开发的经验,给出你关于为 asp.net core 3.1 web 应用程序构建 docker 容器时解析目录名称的问题的解决方法建议,希望对你解决为 asp.net core 3.1 web 应用程序构建 docker 容器时解析目录名称的问题有所启发或帮助;

Visual studio 2019 生成一个 docker 文件,由于应用程序文件夹的结构方式,其 copY 语句如下所示:

FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
workdir /src
copY ["MyWebApp/MyWebApp.csproj","MyWebApp/"]
copY ["../../core/Logic/Logic.csproj","../../core/Logic/"]
copY ["../../core/Models/Models.csproj","../../core/Models/"]
RUN dotnet restore "MyWebApp/MyWebApp.csproj"
copY . .
workdir "/src/MyWebApp"
RUN dotnet build "MyWebApp.csproj" -c Release -o /app/build

我在运行 docker compose 命令时不断收到以下错误消息

=> 错误 [build 4/9] copY [../../core/Logic/Logic.csproj,../../core/Logic/] 0.0s

=> 错误 [build 5/9] copY [../../core/Models/Models.csproj,../../core/Models/]

由于某些原因,我们无法在 VS 2019 中重组文件夹,因为它已以这种方式设置。 docker 文件位于 @H_48_3@myWebApp 项目的文件夹中,docker compose 文件位于解决方案所在的 @H_48_3@myWebApp 文件夹的父文件夹中。即使我将 docker 文件移动到 docker compose 文件旁边,但它不是决定性的。

以下代码片段是 docker-compose 文件:

version: '3.4'

services:
  mywebapp:
    image: ${DOCKER_REGISTRY-}mywebapp
    build:
      context: .
      dockerfile: MyWebApp/Dockerfile
    ports:
    - 8080:80
    - 8443:443

解决此问题的变通方法或解决方案是什么?

解决方法

如果您的文件结构是:

docker-compose.yml
MyWebApp/MyWebApp.csproj
core/Logic/Logic.csproj
core/Models/Models.csproj

您的 Dockerfile 应该是:

FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY ["MyWebApp/MyWebApp.csproj","MyWebApp/"]
COPY ["core/Logic/Logic.csproj","../../core/Logic/"]
COPY ["core/Models/Models.csproj","../../core/Models/"]
RUN dotnet restore "MyWebApp/MyWebApp.csproj"
COPY . .
WORKDIR "/src/MyWebApp"
RUN dotnet build "MyWebApp.csproj" -c Release -o /app/build

为什么?

因为当前工作目录始终是 context 目录。可以使用 docker-compose 的 build.context 字段设置上下文。在您的示例中,上下文是解决方案根。所以 Dockerfile 是从那个目录执行的,不管它放在什么地方。

您无法访问上下文目录之外的文件。
例如。如果上下文解析为 /a/b/c,则 Dockerfile 无法复制或使用 /a/b/d

中的文件

大佬总结

以上是大佬教程为你收集整理的为 asp.net core 3.1 web 应用程序构建 docker 容器时解析目录名称的问题全部内容,希望文章能够帮你解决为 asp.net core 3.1 web 应用程序构建 docker 容器时解析目录名称的问题所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。