如何从正在运行的 docker 镜像中找到提交哈希

max*_*sme 4 git image docker docker-swarm

我目前构建我的图像并使用提交哈希标记它们。然后我拉出这个图像并运行它(通过提交哈希或latest标签)。如何从正在运行的容器中找出提交哈希?

我目前只知道 container hostname。因此,如果容器正在运行,我可以获得摘要:

docker inspect --format='{{.Config.Image}}' hostname
Run Code Online (Sandbox Code Playgroud)

然后从摘要中我可以在 Dockerhub 上搜索以找到链接到摘要的标签(不知道如何做),然后标签具有链接到它的提交哈希。

不幸的是,如果容器不是仍处于活动状态,我会收到错误消息:

Error: No such object: hostname
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以做到这一点?

Adi*_*iii 6

您可以尝试的选项之一是commit hash在环境变量中进行设置,这样您也可以ENV从图像中获取。

docker build --build-arg GIT_COMMIT=$(git rev-parse HEAD) -t my_image:$(git rev-parse HEAD) .
Run Code Online (Sandbox Code Playgroud)

和 Dockerfile

FROM alpine
ARG GIT_COMMIT
ENV GIT_COMMIT=$GIT_COMMIT
Run Code Online (Sandbox Code Playgroud)

现在你可以GIT_COMMIT从 env获取

echo "${GIT_COMMIT}"
Run Code Online (Sandbox Code Playgroud)

  • 我认为这应该是`docker build --build-arg GIT_COMMIT=$(git rev-parse HEAD) -t my_image:$(git rev-parse HEAD) <Dockerfile的路径>` (2认同)