繁体   English   中英

创建 Azure 容器注册表任务时,如何在文件夹中引用 Dockerfile?

[英]How do I reference a Dockerfile in a folder when creating an Azure Container Registry Task?

我正在尝试设置 Azure 容器注册表 (ACR) 以在我提交对 Git 存储库的更改时自动构建 Docker 映像。

我遇到的问题是我的 Dockerfile 位于存储库内的文件夹中。 这是可行的,因为 Azure 检索源代码并开始构建 Docker 映像。 但是,Dockerfile 是指相对于 Dockerfile 的位置(即文件夹内)的文件。 当 ACR 任务尝试构建映像时,它会抱怨找不到文件。 我怀疑这是因为它在存储库的根目录中寻找它们,而不是在与 Dockerfile 相同的文件夹中。

这是我创建任务的方式:

az acr task create -n MyName -r MyRegistry -c https://mySourceRepository -f MyFolder/Dockerfile -t myimage:{{.Run.ID}} --git-access-token <removed>

Dockerfile 的第一部分如下所示:

FROM node:12.16.1-alpine AS build

WORKDIR /usr/src/app
COPY package.json package-lock.json ./
RUN npm install

ACR 日志这样说...

Status: Downloaded newer image for node:12.16.1-alpine
 ---> f77abbe89ac1
Step 2/9 : WORKDIR /usr/src/app
 ---> Running in 22b362ab217c
Removing intermediate container 22b362ab217c
 ---> ee3d0930d0e9
Step 3/9 : COPY package.json package-lock.json ./
COPY failed: stat /var/lib/docker/tmp/docker-builder883638973/package.json: no such file or directory

有没有办法在 ACR 任务的源存储库中指定一个“工作文件夹”?

对于这个问题,大家可以先看一下docker build的上下文。 如图所示,我建议您对 Dockerfile 进行一些更改。 最好的办法是把Dockerfile放在repository的根文件夹下,然后根据根文件夹的相对路径复制Dockerfile中的文件。

当然,您可以保留当前目录结构,然后您需要更改与您的 Git 存储库根文件夹相关的COPY路径。

对此的解决方案是指定要用作 Context 参数的一部分的文件夹:

az acr task create -n MyName -r MyRegistry -c https://mySourceRepository#:MyFolder -f Dockerfile -t myimage:{{.Run.ID}} --git-access-token <removed>

这会导致 Docker 构建操作在指定文件夹中开始,因此 Dockerfile 可以找到它所引用的文件。

有关Docker 构建上下文的详细信息,请参见此处。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM