从容器中获取docker image digest / hash

时间:2018-03-15 17:44:35

标签: docker jenkins docker-swarm

我知道可以访问docker api,以下命令可以正常工作:
curl -s --unix-socket /var/run/docker.sock http:/v1.24/containers/$HOSTNAME/json | jq -r '.Image'

但是,我真的希望避免将docker.sock暴露给容器本身,因为它是CI构建的一部分。有没有其他方法从容器本身中检索容器图像id / hash(即2acdef41a0c)而不暴露docker.sock并向其发出curl请求?

也许类似于Docker, how to get container information from within the container所显示的内容?

3 个答案:

答案 0 :(得分:0)

在容器内运行的以下命令应为您提供容器ID或Docker映像哈希- cat /proc/self/cgroup | head -n 1 | cut -d '/' -f3 | cut -c 1-12

答案 1 :(得分:0)

这将在容器内设置IMAGE env var:

docker run --rm -it -e IMAGE=$(docker images ubuntu:bionic --format {{.ID}}) ubuntu:bionic

答案 2 :(得分:0)

与@Shayk 响应相同,但使用 docker SDK (python) https://docker-py.readthedocs.io/

import docker
....
client = docker.from_env()
image_name = "ubuntu:bionic"
image_id = str(client.images.get(image_name).id).split(":")[1][:12]

container = client.containers.run(image_name, 
    network = "host",
    environment=[f"IMAGE_ID={image_id}",f"IMAGE_NAME={image_name}"],
    detach=True)