このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Docker超入門:Docker Composeでコンテナ内のファイルをホストにコピーする方法

Docker Composeでコンテナ内のファイルをホストにコピーする方法
Docker Composeを使ってコンテナを管理していると、「コンテナの中にあるファイルをホストに取り出したい!」という場面があります。
たとえば、Apacheコンテナ内の index.html を確認したい場合などですね。
この記事では、docker compose cp コマンドを使って、簡単にファイルをコピーする方法をわかりやすく解説します。
図で理解する:ファイルコピーの流れ
Composeを使ったファイルコピーは次のようなイメージです👇

作業前のクリーンアップ
まずは環境をきれいに整えておきましょう。
古いコンテナやイメージが残っていると、後の動作確認がわかりづらくなります。
💡実行コマンド
docker system prune -a このコマンドは、停止中のコンテナや未使用のネットワーク・イメージ・キャッシュをまとめて削除してくれます。
実行すると次のように表示されます。
実行結果
PS C:\Users\joeac> docker system prune -a
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all images without at least one container associated to them
- all build cache
Are you sure you want to continue? [y/N] y「y」を入力して実行すれば、古いオブジェクトが削除され、クリーンな状態になります。
もしボリュームが残っている場合は、必要に応じて削除しておきましょう。
作業ディレクトリの移動
次に、Composeファイル(compose.yaml)を配置しているフォルダに移動します。
ここでは desktop/docker/apache フォルダにある前提です。
cd desktop/docker/apache実行結果
PS C:\Users\joeac> cd desktop/docker/apache
PS C:\Users\joeac\Desktop\docker\apache>コンテナの作成と起動
まずは compose.yaml の中身を確認してみましょう。
cat compose.yaml実行結果
PS C:\Users\joeac\Desktop\docker\apache> cat compose.yaml
version: '3'
services:
apache:
image: httpd:2.4
ports:
- "80:80"このファイルでは、Apache Webサーバー(httpd:2.4) コンテナを定義しています。
コンテナの起動
続いてコンテナを起動します。
docker compose up -d実行結果
PS C:\Users\joeac\Desktop\docker\apache> docker compose up -d
(省略)
[+] Running 7/7
✔ apache Pulled 7.0s
✔ fbb3c2cad9f8 Pull complete 0.4s
✔ 6c19a85825c3 Pull complete 0.9s
✔ af3b83c443ec Pull complete 0.8s
✔ 12844f4198f6 Pull complete 4.0s
✔ 4f4fb700ef54 Pull complete 0.7s
✔ 8c7716127147 Pull complete 3.7s
[+] Running 2/2
✔ Network apache_default Created 0.1s
✔ Container apache-apache-1 Started これでApacheコンテナがバックグラウンドで起動しました。
コンテナ内のファイルをホストにコピー
ここからが本題です。
Docker Composeを使って起動したコンテナ内にある index.html をホスト側へコピーしてみましょう。

📘コマンド書式
docker compose cp <サービス名>:<コンテナ内のファイルパス> <ホスト側のコピー先パス>実際の例は次のようになります。
docker compose cp apache:/usr/local/apache2/htdocs/index.html .このコマンドは、apache サービス(httpdコンテナ)の/usr/local/apache2/htdocs/index.html ファイルを、ホストのカレントディレクトリ(.) にコピーします。
💡コマンド解説表
| 要素 | 説明 |
|---|---|
| docker compose cp | Docker Composeで、コンテナからホストへファイルをコピーするコマンド。 |
| apache | サービス名。compose.yaml内で定義したサービスを指定する。 |
| /usr/local/apache2/htdocs/index.html | コピー元ファイルのコンテナ内パス。 |
| . | コピー先(現在のディレクトリを意味する)。 |
実行結果
PS C:\Users\joeac\Desktop\docker\apache> docker compose cp apache:/usr/local/apache2/htdocs/index.html .
(省略)
[+] Copying 1/1
✔ apache-apache-1 copy apache-apache-1:/usr/local/apache2/htdocs/index.html to . Copied0.0s
PS C:\Users\joeac\Desktop\docker\apache>コピーが成功しました!
これで index.html ファイルがホストの作業ディレクトリに出力されています。
コピーしたファイルの確認
コピーされた index.html の内容を確認してみましょう。
cat index.html実行結果
PS C:\Users\joeac\Desktop\docker\apache> cat index.html
<html><body><h1>It works!</h1></body></html>Apacheの初期ページの内容が表示されましたね。
これで、コンテナ内のファイルをホスト上で確認できました。
docker compose cp コマンドのオプション一覧
| オプション | 説明 |
|---|---|
| なし | 単一ファイルまたはディレクトリをコピー |
| -a | ファイルの属性(パーミッションやタイムスタンプ)を保持 |
| -L | シンボリックリンクを実体化してコピー |
| -r | ディレクトリを再帰的にコピー |
まとめ
Docker Composeを使うと、docker cp と同様にコンテナ内のファイルを簡単に取得できます。
ポイントをまとめると
- サービス名を指定してファイルをコピーできる。
- compose.yamlに基づくコンテナでも問題なく利用可能
- 「.」でカレントディレクトリを指定してホストに出力
この方法を覚えておくと、Webサーバーの出力ファイルや設定ファイルをホスト側で確認・編集するときにとても便利です。
ぜひ試してみてください! 🚀
