「Docker」コンテナとホスト間でファイルをコピーする

Docker でコンテナ起動時に -v オプションを指定してボリュームをマウントしておくとコンテナ終了後もファイル等をホスト側に残すことができますが、うっかり忘れちゃうとコンテナ終了とともに必要だったファイル等が消し飛んでしまいます。こんな時、docker cp でコンテナからホスト側にファイルをコピーしておいて、次回起動時にコピーしたファイルがあるディレクトリをマウントして起動する方法があります。

ヘルプからわかるように、コンテナからホストへ、ホストからコンテナへ、どちら向きにも対応しているようです。

# docker cp --help

Usage:  docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
        docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

Copy files/folders between a container and the local filesystem

Options:
  -a, --archive       Archive mode (copy all uid/gid information)
  -L, --follow-link   Always follow symbol link in SRC_PATH
      --help          Print usage

例えば、コンテナ(ID:1011af605464)内の /usr/local/test/aaa というファイルをホスト側へコピーしてきたい場合、下記の通りとなります。

# docker cp 1011af605464:/usr/local/test/aaa .
# ls aaa
aaa

ディレクトリでももちろんOKです。

# docker cp 1011af605464:/usr/local/test/ .
# ls test/
aaa


上記のようにディレクトリコピーしておけば、コンテナ終了してもホスト側に必要なファイル等が残ってますので、次回コンテナ起動時に当該ディレクトリをマウントして起動してあげればコンテナ側でそれらのファイル等を使用することが可能です。

[環境情報]
CentOS 7
Docker version 1.13.2