目次

docker cp 入門:ホストとコンテナ間でファイルをコピーする方法

docker cp はホストとコンテナの間でファイルをコピーするコマンドです。コンテナの実行中でも停止中でも使えます。

構文

docker cp [オプション] コンテナ:コピー元パス ホスト側のコピー先     # コンテナ → ホスト
docker cp [オプション] ホスト側のコピー元パス コンテナ:コピー先パス   # ホスト → コンテナ
オプション説明
-a, --archiveファイルの所有者(uid/gid)情報を保持します
-L, --follow-linkコピー元がシンボリックリンクの場合、リンク先の実ファイルをコピーします
-q, --quietコピーの進行状況を表示しません

コピー元またはコピー先に - を指定すると、tar 形式で標準入力から読み込んだり、標準出力に出力したりできます。

例

web という名前の nginx コンテナを操作します。

$ docker cp web:/etc/nginx/nginx.conf ./nginx.conf

$ head -n 3 nginx.conf

user  nginx;
worker_processes  auto;

$ echo "<h1>copied in</h1>" > page.html

$ docker cp page.html web:/usr/share/nginx/html/page.html

$ docker exec web cat /usr/share/nginx/html/page.html
<h1>copied in</h1>

$ docker cp web:/etc/nginx/conf.d ./confd

$ ls confd
default.conf

$ docker cp web:/no/such/file .
Error response from daemon: Could not find the file /no/such/file in container web
コマンド説明
docker cp web:/etc/nginx/nginx.conf ./nginx.confコンテナの設定ファイルをホストにコピーします。既定の設定を取得して編集するときによく使います
docker cp page.html web:/usr/share/nginx/html/page.htmlホストのファイルをコンテナにコピーします
docker cp web:/etc/nginx/conf.d ./confdフォルダー全体をコピーします。コピー先の confd が存在しない場合は作成され、フォルダーの内容が入ります
docker cp web:/no/such/file .コピー元が存在しない場合のエラーメッセージです

フォルダーをコピーするときのルール:

  • コピー先が存在しない:コピー先フォルダーを作成し、コピー元フォルダーの内容をコピーします(上の例)。
  • コピー先がすでに存在する:コピー元フォルダー全体をコピー先に入れ、コピー先/コピー元フォルダー名 という構成にします。
  • コピー元パスの末尾に /. を付ける場合(例:web:/etc/nginx/conf.d/.):フォルダー自体を含めず、内容だけをコピーします。

docker cp を使う場面

適している場面:

  • コンテナ内の既定の設定ファイル、ログ、生成されたファイルを取り出す。
  • テスト用に一時的なファイルを入れる。
  • Windows PowerShell でデータベースをバックアップ、復元する:コンテナ内でファイルにエクスポートしてから docker cp で取り出すと、PowerShell が < に対応していないことや文字コードの問題を避けられます(実際の例はよくあるエラーメッセージを参照)。

適していない場面:

  • 開発中にコードを同期する:Bind mount または docker compose watch を使います(Node.js アプリケーションを参照)。
  • 保持する必要があるデータ:Volume を使います。

関連する章

練習問題

練習:web コンテナ内の nginx のウェルカムページ /usr/share/nginx/html/index.html をホストにコピーし、タイトルを変更してからコンテナに戻します。ブラウザーで確認してください(コンテナは -p 8080:80 を指定して起動する必要があります)。

解答
docker cp web:/usr/share/nginx/html/index.html ./index.html
# エディターで index.html を編集
docker cp ./index.html web:/usr/share/nginx/html/index.html

http://localhost:8080 を再読み込みすると、変更を確認できます。コンテナを削除すると、変更は消えます。

よくある質問

docker cp は停止中のコンテナでも使えますか?

はい。docker cp はコンテナのファイルシステムを直接読み書きするため、コンテナが停止していてもコピーできます。コンテナの起動に失敗したときに、設定ファイルやログを取り出して確認するのに便利です。

docker cp で設定ファイルを変更した場合、コンテナを再作成しても残りますか?

残りません。コピーしたファイルはコンテナの書き込み可能レイヤーに保存され、コンテナを削除すると消えます。長期的に使うファイルは、Bind mount でマウントするかイメージに書き込んでください。

docker compose に対応するコマンドはありますか?

あります。docker compose cp サービス名:パス コピー先 と書きます。書き方は同じで、コンテナ名の代わりにサービス名を使います。

更新日 2026年10月14日