docker - Docker LABEL 在多阶段构建中访问构建映像
问题描述
在我的 CI 构建期间,我在多阶段 Docker 构建(测试报告)中从构建镜像中提取构建工件,方法是添加一个LABEL
构建步骤,然后创建一个带有标记图像的容器来提取工件。这似乎在 Docker Desktop for Mac 中被破坏了,或者我误解了它应该如何工作?
这是重现该问题的最小构建:
# Dockerfile.one
FROM alpine AS one
WORKDIR /test
RUN touch here
LABEL build=here
# Dockerfile.two
FROM alpine AS one
WORKDIR /test
RUN touch here
LABEL build=here
FROM alpine AS two
COPY --from=one /test/* /test/
RUN touch again
# test.sh
#! /bin/bash -u
# Clean up
trap 'rm -r test & docker rmi $image' EXIT
docker build -f $1 .
docker images --filter 'label=build=here'
image=$(docker images --filter 'label=build=here' -q | head -n 1)
id=$(docker create $image) && docker cp $id:/test/ . && docker rm $id
ls -l test
运行(仅一个阶段)会产生工作目录中存在./test.sh Dockerfile.one
的文件的预期输出。here
但是,运行./test.sh Dockerfile.two
(多阶段)失败,显然是因为没有图像匹配--filter label=build=here
。
这里有什么问题?
$ docker version
Client:
Cloud integration: 1.0.17
Version: 20.10.7
API version: 1.41
Go version: go1.16.4
Git commit: f0df350
Built: Wed Jun 2 11:56:22 2021
OS/Arch: darwin/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.7
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: b0f5bc3
Built: Wed Jun 2 11:54:58 2021
OS/Arch: linux/amd64
Experimental: true
解决方案
推荐阅读
- android - 如何修复片段中的工厂监听器?
- sql - 学说大查询性能
- python - 无法将单个 str 转换为 Int
- laravel-5 - 在 Laravel 5.7 中,如何在内核中覆盖 Tymon Jwt-Auth 中间件?
- ios - Xcode:“GameView”类型的值没有成员“view”
- android - 在 3 种背景颜色之间转换
- floating-point - 为什么 IEEE754 为 double aka binary64 选择 11 个指数位?
- java - 启动收集的构造函数时出现问题
- android - Android.mk 中 target_link_libraries 的等价物是什么
- c - Linux 内核在哪里锁定和解锁信号量?