【问题标题】:VSTS unable to build a docker imageVSTS 无法构建 docker 镜像
【发布时间】:2018-05-22 09:08:01
【问题描述】:

我有一个简单的开箱即用 VS2017 Web api,我正在尝试在 VSTS 上构建一个 Docker 映像并将该映像发布到 Azure 容器注册表。但它不起作用,错误如下:

2018-05-21T16:49:45.8481201Z Step 7/17 : COPY WebApi/WebApi.csproj WebApi/
2018-05-21T16:49:45.8503445Z COPY failed: stat /var/lib/docker/tmp/docker-builder936381234/WebApi/WebApi.csproj: no such file or directory
2018-05-21T16:49:45.8644972Z ##[error]COPY failed: stat /var/lib/docker/tmp/docker-builder936381234/WebApi/WebApi.csproj: no such file or directory
2018-05-21T16:49:45.8732546Z ##[error]/usr/local/bin/docker failed with return code: 1

它是一个标准的 VS2017 解决方案。

Dockerfile

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

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY WebApi/WebApi.csproj WebApi/
RUN dotnet restore WebApi/WebApi.csproj
COPY . .
WORKDIR /src/WebApi
RUN dotnet build WebApi.csproj -c Release -o /app

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

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

.dockerignore

.dockerignore
.env
.git
.gitignore
.vs
.vscode
docker-compose.yml
docker-compose.*.yml
*/bin
*/obj

docker-compose.yml

version: '3.4'

services:
  webapi:
    image: webapi
    build:
      context: .
      dockerfile: WebApi/Dockerfile

我已经通过更改 .dockerignore 文件、删除它等尝试了所有建议的解决方案。

【问题讨论】:

  • COPY WebApi/WebApi.csproj WebApi/fails as WebApi/WebApi.csproj这一行不存在,请检查原因
  • 相同的配置在本地工作。
  • 请注意,将 dockerfile 放置在哪个文件夹中,或者分别在哪个文件夹中调用 docker build 命令很重要。 Docker 将对该文件夹(以及所有子文件夹)进行快照,并将其转发给 docker 守护进程进行处理。 IE。您在 dockerfile 中的路径必须与您调用 docker build 命令的位置相对
  • @ChirdeepTomar 你解决了这个问题吗?
  • @starianchen-MSFT 是的,使用构建任务代理中的 Docker Compose 任务。

标签: c# docker visual-studio-2017 docker-compose azure-devops


【解决方案1】:

基于构建上下文来复制文件,默认情况下,Docker任务的Use Default Build Context选项是勾选的,你需要取消勾选这个选项并且指定对应的路径(同级解决方案),例如.为根文件夹。

【讨论】:

  • 这解决了我的问题。我不确定为什么他们的默认构建上下文导致它不是路径。谢谢。
  • 老兄!!这节省了我几个小时,因为我是 Azure/Container 新手。非常感谢!!!
【解决方案2】:

我在 Visual Studio 2019 上遇到了同样的问题。这就是为我解决的问题:

  1. 删除 Dockerfile;如果您做了任何自定义,请将您的自定义复制到某处!
  2. 右键项目 -> 添加 -> Docker 支持,这应该会生成一个新的 docker 文件。将您的自定义内容复制回去。
  3. 右键项目->编辑项目文件。
  4. 找到这行 <DockerfileContext>.</DockerfileContext> 并将其删除。

【讨论】:

  • 我刚刚做了第 4 步,这解决了我的问题。谢谢队长
【解决方案3】:

您在撰写文件中的context 应该是 - context: ./WebApi

正如其他答案中提到的,Docker build 将目录作为context,这是构建映像所需的内容的根目录。

【讨论】:

    【解决方案4】:

    我在构建任务代理中使用 Docker 而不是 Docker Compose 任务。更改为 Docker Compose 并指向 Docker compose 文件就可以了。

    【讨论】:

      【解决方案5】:

      我的问题是我有一个不必要的 Dockerfile,它位于子目录中。

      由于 VSTS 默认使用 **/Dockerfile 搜索 Dockerfile,因此使用了这个不必要的 Dockerfile,导致上下文错误。正确的 Dockerfile 被忽略了。

      【讨论】:

        猜你喜欢
        • 2017-09-15
        • 2022-12-11
        • 1970-01-01
        • 2018-06-15
        • 2019-02-12
        • 2020-09-22
        • 1970-01-01
        • 1970-01-01
        • 2020-10-06
        相关资源
        最近更新 更多