可能有几个选项,但这取决于图像的构建方式
假设源代码是在 CI 中克隆的,并且从该源构建了映像(因此您没有克隆 Dockerfile 中的源代码),您可以使用 build-arg 将映像中的提交“烘焙”为环境变量;
在您的 Dockerfile 中,定义一个 build-arg ( ARG
),并将其值分配给一个环境变量 ( ENV
)。需要将其分配给ENV
,因为 build-args(按设计)不会保留在映像本身中(仅在构建期间可用)。
例如:
FROM busybox:latest
ARG GIT_COMMIT=HEAD
ENV GIT_COMMIT=${GIT_COMMIT}
我正在设置一个默认值,因此如果 Dockerfile 是在没有传递 build-arg 的情况下构建的,则该变量包含一些“有用”的东西
然后,在构建映像时,将 git commit 作为构建参数传递
git clone https://github.com/me/my-repo.git && cd my-repo
export GIT_COMMIT=$(git rev-parse --short --verify HEAD)
docker build -t lab:${GIT_COMMIT} --build-arg GIT_COMMIT=${GIT_COMMIT} .
运行映像时,GIT_COMMIT
可用作环境变量。
如果您想在运行时(运行图像时)传递引用,则可以在运行图像时传递引用;例如,传递您正在运行的图像的摘要;
docker pull lab:latest
export IMAGE_DIGEST=$(docker inspect --format '{{ (index .RepoDigests 0) }}' lab:latest)
docker run -it --rm -e IMAGE_DIGEST=${IMAGE_DIGEST} lab:latest