大佬教程收集整理的这篇文章主要介绍了为 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,请注明来意。