首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多级坞文件跳过级

多级坞文件跳过级
EN

Stack Overflow用户
提问于 2020-08-12 13:07:29
回答 1查看 7.6K关注 0票数 5

我正在尝试构建一个带有以下阶段的多级dockerfile,但所有阶段都将被执行。

即使我在docker构建中指定了EXECUTION_ENV=local,我也总是执行git克隆。

文档:

代码语言:javascript
复制
ARG GIT_TOKEN=abc:1a2b3
ARG EXECUTION_ENV=local

# get dependencies from github
FROM alpine/git as gitclone-ci
WORKDIR /usr/src/
RUN git clone https://{GIT_USER_TOKEN}@github.com/something.git \
    && git clone https://{GIT_USER_TOKEN}@github.com/somethingelse.git

## in local dependencies are already available in the parent folder
FROM alpine/git as gitclone-local
WORKDIR /usr/src/
COPY ../something /usr/src/something 
COPY ../somethingelse /usr/src/somethingelse

FROM node:latest as builder
WORKDIR /usr/src
COPY --from=gitclone-${EXECUTION_ENV} /usr/src .
COPY package* ./
COPY src/ src/
RUN ["npm", "install"]

Docker尝试:

代码语言:javascript
复制
docker build -t somecontainer --build-arg GIT_TOKEN=abc:123 --build-arg EXECUTION_ENV=local.

docker build -t somecontainer --target builder --build-arg GIT_TOKEN=abc:123 --build-arg EXECUTION_ENV=local.

注:如果在停靠守护进程中启用"features": { "buildkit": true}并运行cmd docker build -t somecontainer --build-arg GIT_TOKEN=abc:123 --build-arg EXECUTION_ENV=local.,则会得到以下错误

代码语言:javascript
复制
failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed to parse stage name "gitclone-$EXECUTION_ENV": invalid reference format: repository name must be lowercase
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-12 14:29:59

跳过阶段只适用于BuildKit。请参阅讨论这里和文章这里

至于您所得到的错误,您应该使用或不使用BuildKit,因为您不能在COPY指令中使用构建参数。不同的是,对于BuildKit,Docker甚至拒绝启动构建,如果没有它,构建将在COPY指令上失败。

您需要做的是使用FROM指令解析构建args这一事实,为要复制的映像创建额外的别名:

代码语言:javascript
复制
ARG GIT_TOKEN=abc:1a2b3
ARG EXECUTION_ENV=local

# get dependencies from github
FROM alpine/git as gitclone-ci
WORKDIR /usr/src/
RUN git clone https://{GIT_USER_TOKEN}@github.com/something.git \
    && git clone https://{GIT_USER_TOKEN}@github.com/somethingelse.git

## in local dependencies are already available in the parent folder
FROM alpine/git as gitclone-local
WORKDIR /usr/src/
COPY ../something /usr/src/something 
COPY ../somethingelse /usr/src/somethingelse

FROM gitclone-${EXECUTION_ENV} as intermediate

FROM node:latest as builder
WORKDIR /usr/src
COPY --from=intermediate /usr/src .
COPY package* ./
COPY src/ src/
RUN ["npm", "install"]
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63377171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档