从图像中删除卷

问题描述 投票:0回答:3

当我使用一些

docker-compose
volumes
创建一个容器,然后提交该容器时,docker-compose 文件中的
volumes
也将被提交。有没有办法不提交图像中的卷?

使用以下命令只能添加音量但不能删除它们:

docker commit -c 'VOLUME /foo' container_name image_name

谢谢你。

docker docker-compose docker-volume docker-container
3个回答
1
投票

更新(2018 年 4 月):在“如何编辑现有的 docker 镜像元数据?”中,Guido U. Draheim 提出了

gdraheim/docker-copyedit
,一个可以编辑 docker 镜像元数据的 python 脚本。

可以删除或覆盖图像元数据,包括卷。

命令是:

./docker-copyedit.py FROM image1 INTO image2 REMOVE ALL VOLUMES

自 2018 年以来,同一期现在包括(来自 Aalex Gabi):

为了构建带有嵌入式 MySQL 数据库快照的 CI 映像,我最终使用了以下解决方案:“使用

commit
在 Docker 映像中保留并共享开发数据”,来自 Steven Landow

FROM mysql:5.7

ADD snapshots/default.sql /tmp/default.sql

# Using separate data folder outside of mysql image declared volume
# https://github.com/moby/moby/issues/3465
# https://medium.com/@stevenlandow/persist-share-dev-mysql-data-in-a-docker-image-with-commit-f9aa9910be0a
RUN mkdir /var/lib/mysql-no-volume

RUN set -exu ;\
 MYSQL_ROOT_PASSWORD=root docker-entrypoint.sh --datadir /var/lib/mysql-no-volume &\
 MYSQL_PID=$! &&\
 timeout 22 bash -c 'until printf "" 2>>/dev/null >>/dev/tcp/$0/$1; do sleep 1; done' localhost 3306 &&\
 mysql -proot -e 'create database `mydb` collate "utf8mb4_general_ci"' &&\
 mysql -proot mydb < /tmp/default.sql &&\
 kill $MYSQL_PID &&\
 tail --pid=$MYSQL_PID -f /dev/null # Using tail to wait for PID to end https://unix.stackexchange.com/questions/427115/listen-for-exit-of-process-given-pid

# Using separate data folder outside of mysql image declared volume
# https://github.com/moby/moby/issues/3465
# https://medium.com/@stevenlandow/persist-share-dev-mysql-data-in-a-docker-image-with-commit-f9aa9910be0a
CMD ["--datadir", "/var/lib/mysql-no-volume"]

0
投票

目前看来这是不可能的,尽管有很多人请求该功能并且可能有人正在开发它。这个 Github 问题讨论了这个主题:

https://github.com/moby/moby/issues/3465


0
投票

这有点激进,但允许某人从头开始重新定义一切,正如解决方法所暗示的那样。

FROM <your image full of unwanted settings> as source

FROM scratch 

COPY --from=source / /

这将删除所有内容,您将不得不再次公开环境、端口、卷、入口点、命令以及您想要公开的任何内容。

© www.soinside.com 2019 - 2024. All rights reserved.