Dockerコンテナとの間でファイルを転送する方法

Dockerのdocker cpコマンドを使用すると、ローカルマシンとコンテナ間でファイルやディレクトリをコピーできます。双方向で動作し、ディレクトリを再帰的にコピーします。また、実行中または停止中のコンテナを対象とすることも可能です。通常のコピーであれば、コンテナ内でシェルを開いたり、tarアーカイブを作成したりする必要はありません。

基本的な構文は ですdocker cp SOURCE DESTINATION。コンテナパスを指定するには、コロンの前にコンテナ名またはIDを記述します。docker cp LOCAL_PATH CONTAINER:CONTAINER_PATHはコンテナ内にコピーし、 はコンテナからdocker cp CONTAINER:CONTAINER_PATH LOCAL_PATHコピーします。Dockerのdocker cpリファレンスには、パスとディレクトリのルールが記載されています。

1. コンテナ名またはIDを見つける

DockerコマンドがDocker Engineにアクセスできるターミナルから、これを実行してください。

docker ps -a

docker ps実行中のコンテナを一覧表示します。追加すると、-a停止中のコンテナも表示されます。以下のコマンドでは、列の値NAMESまたはコンテナ ID を使用してください。 のような名前は再利用しやすく、ID はコンテナを区別する必要がある場合の正確な識別子です。docker ps / docker container lswebで表示されるフィールドを確認できます。

docker ps -a コマンドのターミナル出力には、web という名前の実行中のコンテナとその短いコンテナ ID が表示されています。
で表示されるコンテナ名またはIDを使用してくださいdocker ps -a。

2. コンピュータからコンテナにファイルをコピーします

コピーしたいファイルがあるマシンで実行しますdocker cp。たとえば、プロジェクトフォルダから、という名前のコンテナ内report.csvのにコピーします。/tmpweb

docker cp ./report.csv web:/tmp/report.csv

./report.csvローカルファイルパス、webコンテナ名またはID、コンテナ内の宛先パスに置き換えてください/tmp/report.csv。コンテナパスはコンテナのルートディレクトリから解釈されるため、先頭のスラッシュは省略可能です。宛先が既存のディレクトリ名の場合、Dockerはソースファイル名を使用してそのディレクトリにファイルを配置します。

ローカルの report.csv ファイルを /tmp/report.csv にある Web コンテナにコピーするターミナル コマンド。
このコマンドは、ホストファイルを1つコンテナにコピーします。

Dockerはディレクトリを再帰的にコピーします。/etc/app/既に存在する場合、このコマンドはconfigその中に以下のものを配置します。

docker cp ./config web:/etc/app/

の内容のみをconfigにコピーするには/etc/app/、/.ソースパスの末尾に を含めます。

ローカル設定ディレクトリの内容をWebコンテナ内の/etc/appにコピーするターミナルコマンド。
接尾/.辞は、ソースディレクトリをネストするのではなく、ディレクトリの内容をコピーすることを意味します。
docker cp ./config/. web:/etc/app/

Docker は不足している親ディレクトリを作成しません。まず、宛先の親ディレクトリを作成してください。実行中のコンテナ内に不足しているフォルダを作成するには、 を実行してdocker exec web mkdir -p /etc/appからファイルをコピーします。docker execは実行中のコンテナを必要としますが、docker cpは必要ありません。

3. コンテナからコンピュータにファイルをコピーします。

ファイルを取得するには、ソースと宛先の順序を逆にします。まずローカルの宛先フォルダを作成し、次にコンテナからログファイルをコピーします。

mkdir -p ./backup
docker cp web:/var/log/app.log ./backup/
ターミナルコマンドを使用して、Webコンテナ内の/var/logからapp.logを取得し、ローカルのバックアップディレクトリに保存します。
コピー先のローカルフォルダは、コピーする前に既に存在している必要があります。

ディレクトリを取得する場合も同様の方法で行えます。/.コンテナのソースパスに以下を追加すると、その内容を既存のローカルディレクトリに直接コピーできます。

docker cp web:/var/log/app/. ./backup/

Dockerは停止したコンテナからファイルをコピーできるため、プロセス終了後にログや設定を収集する際に便利です。

Docker Composeを使用する

プロジェクトで Compose を使用している場合は、コンテナ ID を検索する代わりにサービス名を使用しますdocker compose cp。たとえば、ローカルファイルを という名前のサービスにコピーするには、次のようにしますweb。

docker compose cp ./report.csv web:/tmp/report.csv

逆方向にコピーするには、パスを反転させます。

docker compose cp web:/var/log/app.log ./backup/

サービスに複数のコンテナがある場合にレプリカを選択するなど、オプションの詳細については、公式のdocker compose cpリファレンスを参照してください。

権限と永続ストレージ

デフォルトでは、コンテナにコピーされたファイルは、そのルートユーザーとプライマリグループが所有します。コンピュータにコピーされたファイルは、Docker を実行しているユーザーが所有します。可能な限り権限は保持されます。-aソースの UID と GID を保持するには、 を使用します。アプリがファイルを読み取れない場合は、コンテナを特権化するのではなく、ファイルの宛先と所有権を確認してください。

コンテナの書き込み可能レイヤーにあるファイルは、コンテナが終了すると削除されます。永続化が必要なデータには、Dockerボリュームまたはバインドマウントを使用してください。ボリュームは永続的なコンテナデータに適しており、バインドマウントを使用するとホストとコンテナが同じファイルにアクセスできるようになります。マウントされたパスにファイルをコピーすると、マウントされたデータが変更されます。コピー先を事前に確認してください。ボリュームとバインドマウントに関するDockerのガイダンスを参照してください。

簡単なトラブルシューティング

  • 「そのようなコンテナはありません」:docker ps -aコンテナ名またはIDを実行して確認してください。
  • 「そのようなファイルまたはディレクトリはありません」:ソース パスを確認し、宛先の親ディレクトリが存在することを確認してください。コンテナ パスは . から始まります/。
  • フォルダが想定よりも1階層深い場所に作成されました。末尾のオプションを使用して/.、ディレクトリの内容のみをコピーしてください。
  • アクセスが拒否されました。アカ​​ウントがDockerを使用できる権限を持ち、アプリケーションユーザーが宛先への読み取りまたは書き込み権限を持っていることを確認してください。Linuxでは、sudoシステムのDockerアクセス​​ ポリシーで必須とされている場合にのみ使用してください。
  • クリーンアップ後にファイルが消えてしまうことがあります。重要なデータは、コンテナの書き込み可能レイヤーだけでなく、ボリュームやバインドマウントにも保存してください。

コメントを残す

失われたパーティションとハードディスクデータを安全に復元する方法

失われたパーティションとハードディスクデータを安全に復元する方法

TestDiskとPhotoRecを使って、失われたパーティションやファイルを復元する方法を学びましょう。ソースドライブを保護し、安全にスキャンを行い、復元したデータを別のディスクに保存します。

LinuxデスクトップでQRコードをスキャンする方法

LinuxデスクトップでQRコードをスキャンする方法

CoBangを使えば、Webカメラまたは画像ファイルでLinux上でQRコードをスキャンできます。インストールオプション、セットアップ手順、Flatpakカメラへのアクセスに関する修正方法については、こちらをご覧ください。

Cameractrlsを使ってLinuxでウェブカメラの設定を変更する方法

Cameractrlsを使ってLinuxでウェブカメラの設定を変更する方法

Cameractrlsを使用してLinux上でウェブカメラの設定を変更しましょう。露出、色、フリッカー低減などのサポートされているコントロールを調整し、互換性のあるビデオモードを確認できます。

LinuxにPhpStormをインストールする方法:ツールボックス、Tar.gz、Snap、およびAUR

LinuxにPhpStormをインストールする方法:ツールボックス、Tar.gz、Snap、およびAUR

LinuxにPhpStormをインストールするには、JetBrains Toolboxを使用するか、スタンドアロンのtar.gzアーカイブを使用するか、SnapおよびArch AURオプションを選択してください。Javaは既にバンドルされています。

LinuxにCisco Packet Tracerをインストールする方法

LinuxにCisco Packet Tracerをインストールする方法

Cisco Packet Tracer 9.0.1 を Ubuntu 64 ビット版にダウンロードし、APT を使用して DEB パッケージをインストールし、ターミナルでライセンスに同意してサインインすると、ラボを開始できます。

LinuxでCD-ROMをISOイメージとしてバックアップする方法

LinuxでCD-ROMをISOイメージとしてバックアップする方法

Linux上でGNOME Disksまたはddコマンドを使用してCD-ROM ISOイメージを作成します。光学ドライブを識別し、コピーを監視し、イメージを検証し、破損したディスクやオーディオディスクに別のツールが必要な場合を把握できます。

XFCE 4でデュアルパネルを設定する方法

XFCE 4でデュアルパネルを設定する方法

各ディスプレイごとに個別のXFCE 4パネルを作成し、2番目のパネルを右側の出力に割り当て、位置とサイズを調整し、必要なランチャーとステータス項目を追加します。

LinuxでGIMPを使って画像を切り抜く方法

LinuxでGIMPを使って画像を切り抜く方法

LinuxでGIMPを使って写真の背景を削除する方法:被写体をトレースし、選択した背景を削除し、透明度を保持して、再利用可能なPNG形式でエクスポートします。

FlightGearを無料でダウンロード:公式インストールガイド

FlightGearを無料でダウンロード:公式インストールガイド

FlightGearは公式サイトから無料でダウンロードできます。Windows、macOS、Linuxの各パッケージを比較し、データファイルをインストールして、最初のフライトを開始しましょう。

OKSampler:キーボードビートのための無料かつシンプルな音楽サンプラー

OKSampler:キーボードビートのための無料かつシンプルな音楽サンプラー

OKSamplerはMP3クリップをキーボードのキーにマッピングし、音声をループ再生できます。この旧型フリーウェアの機能、旧機能が失われた箇所、ダウンロード前に確認すべき点について解説します。