ホスト・コンテナ間でファイルのコピー

docker cpコマンドに引数「ソース ターゲット」を付けて、ホスト・コンテナ間でファイル・ディレクトリをコピーできる。コンテナ側は「コンテナ名:フルパス」という書式。

準備

# コンテナ起動(バックグラウンド・モード)
docker run --rm -dit --name test centos:7 bash

# コピーするディレクトリ・ファイル
mkdir tmp; date > tmp/date

ホストからコンテナへコピー

ソースがファイル

docker cp tmp/date test:/root

# ソースがファイルなら、ターゲットに存在しないディレクトリがあると、エラー
docker cp tmp/date test:/root/no-such-dir/
no such directory

# 確認
docker exec -it test ls /root
anaconda-ks.cfg  date

ソースがディレクトリ

# コンテナ・ターゲットなければ自動作成
docker cp tmp/ test:/root/new-dir

# 確認
docker exec -it test ls /root
anaconda-ks.cfg  date  new-dir

# ターゲットあれば、ターゲットの中にディレクトリがコピー
docker cp tmp/ test:/root/new-dir

# 確認
docker exec -it test ls /root/new-dir
date  tmp

# ただし、ソースが/.で終わるなら、ディレクトリの「中身だけ」がターゲットにコピー
docker cp tmp/. test:/tmp

# 確認
docker exec -it test ls /tmp/date
/tmp/date

コンテナからホストへコピー

# コンテナファイルに追記
docker exec -it test bash -c 'date >> /root/date'

# コンテナからホストへ
docker cp test:/root/date ./tmp/date

cat ./tmp/date
2018年  5月 19日 土曜日 20:05:38 JST
Sat May 19 11:09:14 UTC 2018

# コンテナ停止
docker stop test