cp¶
Usage: docker cp [OPTIONS] CONTAINER:PATH LOCALPATH|-
docker cp [OPTIONS] LOCALPATH|- CONTAINER:PATH
Copy files/folders between a container and the local filesystem
--help Print usage
1つめの概要は、 コンテナ のファイルシステム上の パス にある内容を ローカルのパス にコピーするためには、 docker cp が役立ちます。
2つめの概要は、 ローカルパス (あるいは STDIN で - で指定した tar アーカイブを流し込み)に含まれる内容を、ローカルマシン上から コンテナ のファイルシステム上の パス にコピーします。
コピーはコンテナが実行中でも停止中でも可能です。 パス とはファイルまたはディレクトリです。 docker cp コマンドは、全ての コンテナ:パス 値はコンテナ内の / (ルート)ディレクトリとみなします。つまり、転送先の冒頭にスラッシュを付けるのはオプションです。つまり、コマンド compassionate_darwin:/tmp/foo/myfile.txt と compassionate_darwin:tmp/foo/myfile.txt は同一です。 ローカルパス の値は絶対パスで歯無く、現在の作業ディレクトリからの相対パスとみなされます。
動作は一般的な Unix ユーティリティ cp -a に似ています。可能であればパーミッションと一緒に、ディレクトリは再帰的にコピーされます。所有者の権限は、転送終了時にユーザとプライマリ・グループが指定されます。例えば、ファイルをコンテナにコピーすると、 UID:GID は root ユーザとして作成されます。ファイルをローカルのマシン上にコピーするときは、 docker cp コマンドを実行したユーザの UID:GID が作成されます。
パスは / で分離され、 1つめの引数は 送信元のパス 、2つめの引数は 送信先のパス と見なされます。次のように動作します。
送信元のパスでファイルを指定する
送信先のパスが存在しない
送信先のパスにファイルを作成し、ファイルを保存する
送信先のパスが存在せず、最後に/がある場合
- エラーが発生:送信先ディレクトリが存在しなくてはいけない
送信先のパスが存在し、ファイルである場合
- 送信元にあるファイルで、送信先のファイル内容を上書きする
送信先のパスが存在し、ディレクトリの場合
送信元のパスにある名前をもとに、対象のディレクトリにファイルをコピー
送信元のパスでディレクトリを指定する
送信先のパスが存在しない
送信先のパスにディレクトリを作成し、送信元ディレクトリに含まれる 内容 をコピーする
送信先のパスが存在し、ファイルである場合
- エラーが発生:ディレクトリをファイルにコピーできない
送信先のパスが存在し、ディレクトリの場合
送信元のパスが/で終わる場合
- 送信元ディレクトリ` を対象のディレクトリにコピー
送信元のパスが/で終わらない場合
- 送信元ディレクトリ` の 内容 を対象のディレクトリにコピー
コマンドで使う 送信元のパス と 送信先のパス は上記のルールに従う必要があります。 送信元のパス がローカル上かつシンボリックリンクの場合は、その対象ではなくシンボリックリンクがコピーされます。
コロン( : )は コンテナ と パス のデリミタ(区切り文字)として使われますが、 : は file:name.txt のように有効な ローカルのパス としても使われます。この曖昧さを解決するには、 ローカルパス で : を明確な絶対パス・相対パスの指定に使います。例:
`/path/to/file:name.txt` or `./file:name.txt`
/proc 、 /sys 、 /dev 配下にあるリソースのような特定のシステムファイルはコピーできません。これらはコンテナの中にマウントされます。
ローカルパス の1番目の引数に - を使うと、tar アーカイブからの内容を STDIN (標準入力)としてストリーム(流し込み)ます。これにより、対象となるコンテナのファイルシステムにある パス に展開します。
ローカルパス の2番目の引数に - を使うと、基となるコンテナのリソースに含まれる内容が、tar アーカイブとして STDOUT (標準出力)にストリーム出力します。