Dockerのボリューム間のファイルコピー

Docker

なんかもうこの辺は標準機能にしてもらいたい気もする。
ボリュームからローカル(ホスト)へのファイルコピーはよく紹介されているのに、意外とボリューム間のコピーについてはあまり見かけないので書いておきます。

PlantUML Syntax:<br />
@startuml<br />
() “pipe”</p>
<p>node “busybox” as “srccon” {<br />
    folder “path/to/data” as “srcdir” {<br />
    }<br />
}</p>
<p>database “src volume” as “srcvol” {<br />
}</p>
<p>node “busybox” as “dstcon” {<br />
    folder “path/to/data” as “dstdir” {<br />
    }<br />
}</p>
<p>database “dst volume” as “dstvol” {<br />
}</p>
<p>srcdir -d-> srcvol<br />
dstdir -d-> dstvol</p>
<p>srcdir ..r.> pipe : docker cp<br />
pipe ..r.> dstdir : docker cp<br />
@enduml<br />


WSL前提です。
まずはコピー元とコピー先のボリュームをマウントしたコンテナを用意しておきます。
それらは同一のコンテナでも別々のコンテナにマウントされていても構いません。
特に紐づくコンテナが無ければbusyboxイメージでコンテナを作成します。

$ docker create -v srcvol:/src --name src-container busybox
$ docker create -v dstvol:/dst --name dst-container busybox

docker cpコマンドを実行します。
このコマンドは標準出力と標準入力が使えるので、パイプでつなげればOKです。

$ docker cp src-container:/src - | docker cp - dst-container:/dst
surface0
管理人
親ディレクトリごとコピーされるので、この場合はコピー先の/dst/srcに展開されることに注意してください。

そして要らなくなったコンテナは削除しておきましょう。

$ docker rm src-container dst-container

以上!

スポンサーリンク
管理人

システムえんじにゃー🐈
趣味はエレキギターなど。作曲したい。
WoWs/プリコネ
記事に関する質問はお気軽にどうぞ。

surface0をフォローする
surface0をフォローする
Rain or Shine

コメント

タイトルとURLをコピーしました