我知道可以访问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所显示的内容?
答案 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)