Gee*_*ekn 16 docker dockerfile azure-devops azure-pipelines
我正在尝试创建一个部署管道来将我的映像部署到 Kubernetes 集群。这个过程的第一步是基于 docker 文件创建一个镜像。我正在使用的 docker 文件是在我添加 docker 支持时从 Visual Studio 生成的,并在右键单击 docker 图像并选择创建它时成功创建了图像。当我配置 Azure Pipeline 时,创建 docker 映像会在尝试构建实际解决方案时失败。上一步获取了所有源文件,但随后在创建 docker 镜像时失败
[error]COPY failed: stat/var/lib/docker/tmp/docker-builder158012929/DockerTest/DockerTest.csproj:
no such file or directory
[error]/usr/bin/docker failed with return code: 1
Run Code Online (Sandbox Code Playgroud)
以下是Visual Studio生成的docker文件,azure管道阶段参考创建docker镜像。
FROM mcr.microsoft.com/dotnet/core/runtime:2.2-stretch-slim AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS
build
WORKDIR /src
COPY ["DockerTest/DockerTest.csproj", "DockerTest/"]
RUN dotnet restore "DockerTest/DockerTest.csproj"
COPY . .
WORKDIR "/src/DockerTest"
RUN dotnet build "DockerTest.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "DockerTest.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "DockerTest.dll"]
Run Code Online (Sandbox Code Playgroud)
##[section]开始:构建容器镜像
======================================== ====================================== 任务:Docker 描述:构建、标记、推送、或者运行 Docker 镜像,或者运行 Docker 命令。任务可以与 Docker 或 Azure 容器注册表一起使用。版本:0.150.6 作者:Microsoft Corporation 帮助:[更多信息] https://go.microsoft.com/fwlink/?linkid=848006 )
================== ================================================== ========== [命令]/usr/bin/docker build -f
/home/vsts/work/1/s/DockerTest/Dockerfile -t ihacontainers.azurecr.io/dockertest:6 /home/vsts/work/1/s/DockerTest 将构建上下文发送到 Docker 守护进程 6.144kB 步骤 1/15:从 mcr.microsoft.com/dotnet/core/runtime:2.2-stretch-slim AS base 2.2-stretch-slim: Pulling from dotnet/core/runtime 743f2d6c1f65: Pulling fs layer 074da88b8de0: Pulling fs layer ac831735b48s4ad34d34d拉FS层3adcc844418d:等待ac831735b47a:下载完成743f2d6c1f65:验证校验743f2d6c1f65:下载完成074da88b8de0:验证校验074da88b8de0:下载完成3adcc844418d:验证校验zadcc844418d:下载完成743f2d6c1f65:拉完整074da88b8de0:拉完整ac831735b47a:拉完整3adcc844418d:拉完整摘要:sha256:066c31b113b0a20e6155d3bd8a314563c688d2ec31c11d7e551af5bc2595f30c状态:已下载较新的图像为mcr.microsoft.com/dotnet/core/runtime:2.2-stretch-slim ---> c0f9ab44ecc1步骤2/15:WORKDIR /应用--->运行中6d1a5f5600dd卸下中间容器6d1a5f5600dd - -> 527fcebeaf1f 第 3/15 步:来自 mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build 2.2-stretch:从 dotnet/core/sdk c5e155d5a1d1 拉取:拉取 fs 层 221d80d00ae9:s312Pullingca:s342 Pullingca FS层3b7ca19181b2:拉FS层3466298fc231:拉FS层310737d73ed1:拉FS层dc981de74fae:拉FS层3b7ca19181b2:等待3466298fc231:等待310737d73ed1:等待dc981de74fae:等待4250b3117dca:验证校验4250b3117dca:下载完成221d80d00ae9:验证校验221d80d00ae9:下载完成3466298fc231:验证校验3466298fc231:下载完成c5e155d5a1d1:验证校验c5e155d5a1d1:下载完成3b7ca19181b2:验证校验3b7ca19181b2:下载完成c5e155d5a1d1:拉完整221d80d00ae9:拉完整310737d73ed1:验证校验310737d73ed1:下载完成4250b3117dca:拉完整dc981de74fae:验证校验dc981de74fae:下载完成3b7ca19181b2:拉完整3466298fc231:拉完整310737d73ed1:拉完整dc981de74fae:拉完整摘要:SHA256:222cc0bb0bc93875ee0f6be626b2838beea838f65e53653e07c33eb9d00b0163状态:下载的mcr.microsoft.com/dotnet/core/sdk:2.2-stretch新形象---> e4747ec2aaff 步骤 4/15:工作目录 /src --->在 a7ebcac87f68 中运行删除中间容器 a7ebcac87f68 ---> d7541674a9da 步骤 5/15:复制 ["DockerTest/DockerTest.csproj", "DockerTest/"] 复制失败:stat /var/lib/docker/tmp/docker-builder125901 /DockerTest.csproj: 没有这样的文件或目录##[错误]复制失败:stat/var/lib/docker/tmp/docker-builder158012929/DockerTest/DockerTest.csproj:没有这样的文件或目录
##[error]/usr/bin/docker failed with return code: 1 ##[section]Finishing: Build a container image
Mar*_*tin 34
我通过使用与 Visual Studio 中相同的 dockerfile 将 buildContext 设置为 '$(Build.Repository.LocalPath)' 解决了这个问题,而无需调整路径:
在 YAML-Konfiguration 中,我添加了以下行:
buildContext: '$(Build.Repository.LocalPath)'
Run Code Online (Sandbox Code Playgroud)
[错误]复制失败:stat/var/lib/docker/tmp/docker-builder158012929/DockerTest/DockerTest.csproj:没有那个文件或目录
根据此错误消息,错误发生在您的 dockerfile: 行上 COPY ["DockerTest/DockerTest.csproj", "DockerTest/"]。
首先,请确认您没有使用.dockerignorefile 来排除此文件:DockerTest/DockerTest.csproj,它必须存在于您运行构建的目录中。
如果它没有被忽略 .dockerignore文件,那么你需要考虑你的 dockerfile 位置级别。
DockerTest.csprojfile 不应放在较低的源文件路径级别。您需要更改上下文的来源,将其移至更高级别。因此,手动修改您的 dockerfile 为:
COPY ["DockerTest.csproj", "DockerTest/"]
Run Code Online (Sandbox Code Playgroud)
当您通过 Visual Studio(至少 v16.3.9)生成 Docker 支持并且您在 Azure Pipeline 中使用这个生成的项目和预定义的 Docker 管道模板时,就会出现这个问题经典编辑器或新的 4 步易于点击的方式,即所谓的现代编辑器。
生成的文件中的更改来自
COPY ["DockerTest/DockerTest.csproj", "DockerTest/"]
Run Code Online (Sandbox Code Playgroud)
到
COPY ["DockerTest.csproj", "DockerTest/"]
Run Code Online (Sandbox Code Playgroud)
解决 Azure Pipeline 的问题,但它会破坏Visual Studio 中的本地构建。
添加
buildContext: '$(Build.Repository.LocalPath)'
Run Code Online (Sandbox Code Playgroud)
到现代编辑器生成的 YAML 文件将破坏构建任务。现代编辑器中使用的模板依赖于默认构建上下文,解析器将无法识别该buildContext命令。
解决此问题的唯一可能方法是 覆盖默认构建上下文。此覆盖将保留 Visual Studio 或 Azure Pipeline 中的构建功能。
可以在经典编辑器的构建映像任务中覆盖构建上下文。
| 归档时间: |
|
| 查看次数: |
6082 次 |
| 最近记录: |