当我docker-compose
使用 some创建一个容器volumes
然后提交该容器时,volumes
docker-compose 文件中的 也将被提交。有没有办法不提交映像中的卷?
使用以下命令只能添加卷但不能删除它们:
docker commit -c 'VOLUME /foo' container_name image_name
谢谢你。
当我docker-compose
使用 some创建一个容器volumes
然后提交该容器时,volumes
docker-compose 文件中的 也将被提交。有没有办法不提交映像中的卷?
使用以下命令只能添加卷但不能删除它们:
docker commit -c 'VOLUME /foo' container_name image_name
谢谢你。
更新(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 with
commit
” 。
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"]
似乎目前这是不可能的,尽管有很多人要求该功能并且有人可能正在开发它。这个 Github 问题讨论了这个主题: