如何删除 docker 图像中的配置卷

How to remove configure volumes in docker images

我用docker run -it -v /xx1 -v /xx2 [image] /bin/bash创建了一个容器。

然后提交图像并推送到 docker 集线器。

使用docker inspect [image]

Volumes 详情是

"Volumes": {
            "/xx1": {},
            "/xx2": {}
        },

现在我想删除此图像中的音量 /xx1

我该怎么办?

我认为现在 Docker 工具无法做到这一点。您无法从 运行 容器中删除卷,或者如果您要将图像用作新 Docker 文件的基础,则无法删除继承的卷。

也许您可以使用 Jérôme Petazzoni 的 nsenter 工具手动删除容器内的挂载,然后提交。您可以使用该方法 attach a volume to a running container,但需要一些相当低级的黑客才能做到这一点。

删除卷的一种简单方法是导出然后导入容器映像:

  • docker run --name my-container -it [image] /bin/bash
  • docker export my-container > tarball
  • docker import tarball

有一个解决方法,您可以 docker save image1 -o archive.tar、编辑元数据 json 文件,然后 docker import -i archive.tar。这样历史记录和所有其他元数据都得以保留。

为了帮助save/unpack/edit/load,我创建了一个小脚本,看看docker-copyedit。专门针对您的问题,您将执行

./docker-copyedit.py from [image] into [image2] remove volume /xx1