3

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

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

docker commit -c 'VOLUME /foo' container_name image_name

谢谢你。

4

2 回答 2

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 映像,我最终使用了这个解决方案:来自Steven Landow的“ Persist & share dev data in a Docker image withcommit ” 。

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"]
于 2016-09-19T11:08:41.467 回答
0

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

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

于 2017-10-26T15:09:10.780 回答