目次
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日