我想从docker镜像中复制一些文件而不实际运行该图像中的容器。有可能这样做吗?如果是,那么需要采取哪些步骤?
答案 0 :(得分:6)
图像不是停靠者cp因为图像是不可变对象但是:
您可以创建非正在运行的容器:
docker create --name cont1 some-image
docker cp cont1:/some/dir/file.tmp file.tmp
docker rm cont1
图片上的docker cp的完整未接受提案位于:
答案 1 :(得分:0)
docker image save alpine -o alpine.tar
解压缩,它将有一个名为hash的hash,里面有一个包含图像文件的layer.tar。
答案 2 :(得分:0)
这是一个通过容器从Docker Image复制文件的单行程序:
docker run --rm \
-v $(pwd):/binary my-image /bin/sh -c "cp /kube-bench /binary"
docker run --rm --entrypoint "/bin/sh" \
-v $(pwd):/binary kube-bench-image -c "cp /kube-bench /binary"
这两个命令都会挂载当前目录,以便将文件/kube-bench
复制到它。
答案 3 :(得分:0)
如果没有CMD或入口点,则Alfonso Tienda响应不适用于图像。
jhernandez是解决方案的一个很好的起点,但是它需要提取所有文件。
那:
docker image save $IMAGE |
tar tf - |
grep layer.tar |
while read layer; do
docker image save $IMAGE |
tar -xf - $layer -O |
tar -xf - $FILENAME ; done
因此,我们可以将IMAGE
和FILENAME
设置为像以下这样提取:
$ IMAGE=alpine
$ FILENAME=etc/passwd
$ docker image save $IMAGE | tar tf - | grep layer.tar | while read layer; do docker image save $IMAGE | tar -xf - $layer -O | tar -xf - $FILENAME ; done
我们可以节省一些存储空间。