docker 从映像中删除卷

x33g5p2x  于 11个月前  发布在  Docker
关注(0)|答案(3)|浏览(162)

当我用一些volumesdocker-compose创建一个容器,然后提交该容器时,docker-compose文件中的volumes也会被提交。
使用以下命令只能添加卷,不能删除卷:

docker commit -c 'VOLUME /foo' container_name image_name

字符串
谢谢

aelbi1ox

aelbi1ox1#

更新(2018年4月):在“How can I edit an existing docker image metadata?“中,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"]

gfttwv5a

gfttwv5a2#

目前看来这是不可能的,尽管有很多人请求该功能,有人可能正在努力。这期Github讨论的主题是:
https://github.com/moby/moby/issues/3465

v09wglhw

v09wglhw3#

这是一个有点激烈,但允许有人从头开始重新定义一切,作为变通方法暗示。

FROM <your image full of unwanted settings> as source

FROM scratch 

COPY --from=source / /

字符串
这将删除一切,你将不得不再次暴露环境,端口,卷,入口点,命令和任何你想暴露的东西。

相关问题