【问题标题】:Project dependency not found when running DockerFile build command on Azure DevOps在 Azure DevOps 上运行 DockerFile 构建命令时找不到项目依赖项
【发布时间】:2019-06-27 00:16:29
【问题描述】:

这是VS2017生成的Dockerfile。 为了在 Azure DevOps 上使用它,我做了一些改动

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ["WebApi.csproj", "WebApi/"]
COPY ["./MyProject.Common/MyProject.Common.csproj", "MyProj.Common/"]
RUN dotnet restore "MyProject.WebApi/MyProject.WebApi.csproj"
COPY . .
WORKDIR "/src/MyProject.WebApi"
RUN dotnet build "MyProject.WebApi.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "MyProject.WebApi.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "MyProject.WebApi.dll"]

解决方案结构

MyProject.sln
   -MyProject.Common
     ...
   -MyProject.WebApi
       ...
       Dockerfile

我已经在 Azure DevOps 下创建了一个 Build Pipeline 以通过以下步骤运行 Docker Build:

  1. 从 Azure Repos Git 获取源步骤
  2. 代理作业(托管 Ubuntu 1604)
  3. 命令行脚本docker build -t WebApi .

我有这个错误

2019-02-02T18:14:33.4984638Z  ---> 9af3faec3d9e
2019-02-02T18:14:33.4985440Z Step 7/17 : COPY ["./MyProject.Common/MyProject.Common.csproj", "MyProject.Common/"]
2019-02-02T18:14:33.4999594Z COPY failed: stat /var/lib/docker/tmp/docker-builder671248463/MyProject.Common/MyProject.Common.csproj: no such file or directory
2019-02-02T18:14:33.5327830Z ##[error]Bash exited with code '1'.
2019-02-02T18:14:33.5705235Z ##[section]Finishing: Command Line Script

使用的工作目录的附加屏幕截图

我不明白是否必须更改 Dockerfile 中的某些内容或 DevOps 上的控制台脚本步骤

【问题讨论】:

  • 它在本地工作吗?
  • 我已经尝试了很多次,我迷路了。不 :( .... 所以我的问题是我不明白如何从 MyProject.WebApi 根目录开始运行 dockerfile
  • 好吧,根据错误,我认为你在正确的目录中,我只是不明白为什么这个 dockerfile 暗示 myprojectcommon 是 webapi 的子目录

标签: azure docker azure-devops dockerfile azure-pipelines


【解决方案1】:

这只是一个预感,但考虑到您的 Dockerfile 位于 MyProject.WebApi 下,并且您想从同一级别的 MyProject.Common 复制文件,那么您可能需要指定不同的上下文根目录运行docker build

docker build -t WebApi -f Dockerfile ../

当 Docker 构建一个镜像时,它会收集一个上下文 - 一个在构建过程中可以访问的文件列表,并且可以复制到镜像中。

当您运行docker build -t WebApi . 时,它会在MyProject.WebApi 目录中运行,并且目录. 中的所有文件(除非您有.dockerignore 文件),在这种情况下为MyProject.WebApi,都包含在上下文中。但是MyProject.Common 不是上下文的一部分,因此您不能从中复制任何内容。

希望对你有帮助

编辑:也许您不需要指定Working Directory(如屏幕截图所示),那么命令将变为:

docker build -t WebApi -f MyProject.WebApi/Dockerfile .

在这种情况下,Docker 将使用位于MyProject.WebApi 内的Dockerfile,并将属于该解决方案的所有文件包含在上下文中。

您还可以在official documentation 中的docker build 命令的扩展说明 中阅读上下文。

【讨论】:

  • 谢谢伊戈尔!我做了这些更改 COPY ["MyProject.WebApi/MyProject.WebApi.csproj", "WebApi/"] 和 COPY ["MyProject.Common/MyProject.Common.csproj", "MyProj.Common/"] 。我运行命令“docker build -t WebApi -f MyProject.WebApi/Dockerfile”。没有设置工作目录,它工作正常。非常感谢!!!!!!
  • 很高兴能帮上忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-22
  • 1970-01-01
  • 2020-05-01
  • 1970-01-01
  • 2020-04-03
  • 2012-07-30
  • 2015-12-19
相关资源
最近更新 更多