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
オプションを指定することで、コンテナの実行が完了するとコンテナは自動的に削除されます。