Dockerでボリュームをコピー

Dockerの標準コマンドには、ボリュームを直接コピーする機能がありません。簡単な方法として、一時的なコンテナを起動し、コピー元とコピー先のボリュームをマウントした上で、コンテナ内でコピー処理を実行する方法があります。

まず、コピー先のボリュームを作成します。

docker volume create --name new_volume

次に、以下のコマンドを実行して、コピー元のボリュームの内容をコピー先に複製します。

docker container run --rm -it \
-v old_volume:/src \
-v new_volume:/dest \
alpine sh -c "apk add --no-cache rsync && rsync -a /src/ /dest/"

このコマンドでは、old_volume/src に、new_volume/dest にマウントした Alpine イメージのコンテナを起動し、/src 内のファイルを /dest にコピーしています。

コピーにはrsyncコマンドを利用しています。alpineには標準でrsyncは含まれていないため、apk addで追加した後に、rsyncを実行しています。rsyncの代わりに-aオプションを付けたcpコマンドを利用しても良いと思います。所有者やパーミッション等の情報が維持された形でコピーされます。

また、dockerコマンドに--rm オプションを指定することで、コンテナの実行が完了するとコンテナは自動的に削除されます。

コメントを残す

Required fields are marked *.


This site uses Akismet to reduce spam. Learn how your comment data is processed.

Top