docker-compose
いくつかのコンテナーを作成してvolumes
そのコンテナーをコミットするとvolumes
、docker-compose ファイル内の もコミットされます。イメージ内のボリュームをコミットしない方法はありますか?
以下のコマンドでは、ボリュームを追加することはできますが、削除することはできません:
docker commit -c 'VOLUME /foo' container_name image_name
ありがとうございました。
docker-compose
いくつかのコンテナーを作成してvolumes
そのコンテナーをコミットするとvolumes
、docker-compose ファイル内の もコミットされます。イメージ内のボリュームをコミットしない方法はありますか?
以下のコマンドでは、ボリュームを追加することはできますが、削除することはできません:
docker commit -c 'VOLUME /foo' container_name image_name
ありがとうございました。
更新 (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"]