3

docker-composeいくつかのコンテナーを作成してvolumesそのコンテナーをコミットするとvolumes、docker-compose ファイル内の もコミットされます。イメージ内のボリュームをコミットしない方法はありますか?

以下のコマンドでは、ボリュームを追加することはできますが、削除することはできません:

docker commit -c 'VOLUME /foo' container_name image_name

ありがとうございました。

4

2 に答える 2

1

更新 (2018 年 4 月): 「How can I edit an existing docker image metadata?」で、Guido U. Draheimgdraheim/docker-copyeditは、dockerイメージ メタデータを編集できる python スクリプトを提案しています。

これにより、ボリュームを含むイメージ メタデータが削除または上書きされる可能性があります。

コマンドは次のようになります。

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

2018 年以降、同じ号に以下が含まれるようになりました( Aalex Gabiから):

MySQL データベース スナップショットが埋め込まれたCIイメージを構築するために、私はこのソリューションを使用することになりました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"]
于 2016-09-19T11:08:41.467 に答える