DockerCOPYコマンドがディレクトリをマウントしない

user568021
Host OS: Linux
Container OS: Linux

Dockerの使い方を学ぼうとしています。docker-composeを使用して、イメージの構築とコンテナーの実行に成功しています。

コンテナ内にディレクトリをマウントしたい場合、ドキュメントには、Dockerfile内でCOPYコマンドを使用する必要があると記載されています。

COPY /path/to/my/addons/ /path/to/directory/inside/container

残念ながら、このコンテナーを作成すると、COPYコマンドが無視され、/ path / to / my / addonsからのデータがコンテナーに到達しません。

ADDコマンドも試してみましたが、同じ問題が発生します。

ライオン

絶対パス

まず、に絶対パスを使用することはできませんCOPYすべてのパスは、ビルドのコンテキスト内にある必要がありますDockerfileつまり、に関連している必要がありますホストのフォルダ構造が次のような場合

my-docker-directory
-- Dockerfile
-- docker-compose.yml
-- addons

その後、を使用することができますCOPY addons /path/to/directory/inside/container以降のすべての説明では、にaddons関連するフォルダーがあると想定していますDockerfile

ディレクトリのマウント

COPY実行時にフォルダをコンテナにマウントするだけではありません実際にはディレクトリをマウントしません代わりに、addonsされるコピー/path/to/directory/inside/container内部の画像このプロセスは単方向(ホスト>イメージ)で発生し、イメージがビルドされたときにのみ発生することを理解することが重要です。

COPYバイナリにコンパイルされたソースコードのように、ビルド時に必要だった依存関係をイメージに追加するように設計されています。それが絶対パスができない理由です。Dockerfile通常、トップレベル領域にソースコード/設定ファイルと一緒に配置されています。

イメージのビルドプロセスは、を使用して強制する場合を除いて、最初の実行でのみ発生しdocker-compose up --buildます。しかし、これはあなたが望むものではないようです。実行時にホストからディレクトリをマウントするにvolumeは、docker-composeファイルでa使用ます。

version: '3'
services:
  test:
    build: .
    volumes:
      - ./addons/:/path/to/directory/inside/container

いつ使用しCOPY、いつボリュームを使用しますか?

それはことを認識することが重要だCOPYADDしますコピーする場合は、ビルド時に画像にものをvolumes(画像でそれらを含めず)runtumeでホストからそれらをマウントします。したがって、通常は、デフォルトの構成ファイルのようにユーザーが必要とする一般的なものをイメージにコピーします。

ボリュームには、カスタマイズされた構成ファイルなど、ホストからのファイルを含める必要があります。またはデータベースのデータディレクトリとして永続的なもの。ボリュームがないと、これらのコンテナーは機能しますが、永続的ではありません。そのため、コンテナを再起動するとすべてのコンテンツが失われます。

一方が他方を除外しないことに注意してください。それはにいいのよCOPY、ユーザーがそれらを変更するボリュームでこれを無効にすることができる画像では、いくつかのアプリケーションのデフォルトの設定、。特に開発中は、変更された単一の構成ファイルに対してイメージ全体を再構築する必要がないため、これにより作業が簡単になります*。

*統合キャッシュメカニズム用にDockerfilesを最適化することは良い習慣ですが。aDockerfileが適切に記述されている場合、小さな構成変更の再構築にそれほど時間はかからないことがよくあります。しかし、それはこの範囲外の別のトピックです。

例を挙げたより詳細な説明

基本的なセットアップCOPYDockerfile

簡単な例としてDockerfile、nginxウェブサーバーイメージからを作成し、その中にhtmlをコピーします

FROM nginx:alpine
COPY my-html /usr/share/nginx/html

デモコンテンツを含むフォルダを作成しましょう

mkdir my-html
echo "Dockerfile content" > my-html/index.html

ミニマルを追加します docker-compose.yml

version: '3'
services:
  test:
    build: .

を使用して初めて実行するとdocker-compose up -d、イメージがビルドされ、テストページが提供されます。

root@server2:~/docker-so-example# docker-compose up -d
Creating network "docker-so-example_default" with the default driver
Creating docker-so-example_test_1 ... done

root@server2:~/docker-so-example# curl $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' docker-so-example_test_1)
Dockerfile content

テストファイルを操作してみましょう。

echo "NEW Modified content" > my-html/index.html

でサーバーをcurl再度要求すると、古い応答が返されます。

root@server2:~/docker-so-example# curl $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' docker-so-example_test_1)
Dockerfile content

コンテンツを適用するには、再構築が必要です。

docker-compose down && docker-compose up -d --build

これで、変更を確認できます。

root@server2:~/docker-so-example# curl $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' docker-so-example_test_1)
NEW Modified content

でボリュームを使用する docker-compose

違いを示すために、次のdocker-compose.ymlようにファイルを変更してボリュームを使用します。

version: '3'
services:
  test:
    build: .
    volumes:
      - ./my-html:/usr/share/nginx/html

次に、を使用docker-compose down && docker-compose up -dてコンテナを再起動し、再試行します。

root@server2:~/docker-so-example# echo "Again changed content" > my-html/index.html
root@server2:~/docker-so-example# curl $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' docker-so-example_test_1)
NEW Modified content
root@server2:~/docker-so-example# echo "Some content" > my-html/index.html
root@server2:~/docker-so-example# curl $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' docker-so-example_test_1)
Some content

イメージを再構築しておらず、変更がすぐに適用されることに注意してください。ボリュームを使用すると、ファイルはイメージに含まれません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Hadoop "cd"(ディレクトリ変更コマンド)が機能しない

分類Dev

cpコマンドがディレクトリ全体をコピーしないのはなぜですか?

分類Dev

duコマンドを使用したCentos6.5のディレクトリサイズが正しくない

分類Dev

/ tmp内のDockerバインドマウントディレクトリが機能しない

分類Dev

存在するときにディレクトリが存在しないことを示すcpコマンド

分類Dev

`mogrify-path`コマンドでディレクトリが存在しない場合はディレクトリを作成します

分類Dev

ディレクトリが存在しない場合でも、ファイルをディレクトリに移動するコマンド

分類Dev

「flutter」コマンドがプロジェクトのルートディレクトリで機能していません。[ウィンドウズ]

分類Dev

ヨーマンのコピーディレクトリが機能しない

分類Dev

rsyncコマンドがディレクトリに再帰しないのはなぜですか?

分類Dev

コマンドプロンプトがプロンプトの前に現在のディレクトリを表示しない

分類Dev

存在しない場合は、testコマンドを使用してディレクトリを作成します

分類Dev

マウントポイントとして機能するディレクトリへのコピー操作で、マウントされたドライブにデータがコピーされないのはなぜですか?

分類Dev

リダイレクトコマンドが予期しない

分類Dev

リダイレクトコマンドが予期しない

分類Dev

「ディレクトリの変更」コマンドがMac端末で機能しない

分類Dev

ファイル名がディレクトリに存在しない場合の検索コマンド

分類Dev

Dockerバインドマウントディレクトリ内のファイルが更新されない

分類Dev

シェル内の1つのディレクトリをステップダウンするコマンドはありますか?(サブディレクトリが1つしかない場合)

分類Dev

ディレクトリを表示しないようにtreeコマンドを取得する

分類Dev

中間マウントなしでサブディレクトリをマウントします

分類Dev

clangを使用して2段階のコマンドラインビルドでdSYMディレクトリが生成されないのはなぜですか?

分類Dev

svnupgrade-サブディレクトリからコマンドを実行すると機能しない

分類Dev

ディレクトリがディスクXにマウントされているかどうかを確認し、マウントされていない場合はマウントする方法

分類Dev

.shファイルがディレクトリ変更コマンドを実行していません

分類Dev

.shファイルがディレクトリ変更コマンドを実行していません

分類Dev

ファイルが置かれているディレクトリでコマンドを実行します

分類Dev

存在しないホストディレクトリをルート以外のコンテナにマウントします

分類Dev

存在しないボリュームディレクトリをディレクトリにマウント/リンクする

Related 関連記事

  1. 1

    Hadoop "cd"(ディレクトリ変更コマンド)が機能しない

  2. 2

    cpコマンドがディレクトリ全体をコピーしないのはなぜですか?

  3. 3

    duコマンドを使用したCentos6.5のディレクトリサイズが正しくない

  4. 4

    / tmp内のDockerバインドマウントディレクトリが機能しない

  5. 5

    存在するときにディレクトリが存在しないことを示すcpコマンド

  6. 6

    `mogrify-path`コマンドでディレクトリが存在しない場合はディレクトリを作成します

  7. 7

    ディレクトリが存在しない場合でも、ファイルをディレクトリに移動するコマンド

  8. 8

    「flutter」コマンドがプロジェクトのルートディレクトリで機能していません。[ウィンドウズ]

  9. 9

    ヨーマンのコピーディレクトリが機能しない

  10. 10

    rsyncコマンドがディレクトリに再帰しないのはなぜですか?

  11. 11

    コマンドプロンプトがプロンプトの前に現在のディレクトリを表示しない

  12. 12

    存在しない場合は、testコマンドを使用してディレクトリを作成します

  13. 13

    マウントポイントとして機能するディレクトリへのコピー操作で、マウントされたドライブにデータがコピーされないのはなぜですか?

  14. 14

    リダイレクトコマンドが予期しない

  15. 15

    リダイレクトコマンドが予期しない

  16. 16

    「ディレクトリの変更」コマンドがMac端末で機能しない

  17. 17

    ファイル名がディレクトリに存在しない場合の検索コマンド

  18. 18

    Dockerバインドマウントディレクトリ内のファイルが更新されない

  19. 19

    シェル内の1つのディレクトリをステップダウンするコマンドはありますか?(サブディレクトリが1つしかない場合)

  20. 20

    ディレクトリを表示しないようにtreeコマンドを取得する

  21. 21

    中間マウントなしでサブディレクトリをマウントします

  22. 22

    clangを使用して2段階のコマンドラインビルドでdSYMディレクトリが生成されないのはなぜですか?

  23. 23

    svnupgrade-サブディレクトリからコマンドを実行すると機能しない

  24. 24

    ディレクトリがディスクXにマウントされているかどうかを確認し、マウントされていない場合はマウントする方法

  25. 25

    .shファイルがディレクトリ変更コマンドを実行していません

  26. 26

    .shファイルがディレクトリ変更コマンドを実行していません

  27. 27

    ファイルが置かれているディレクトリでコマンドを実行します

  28. 28

    存在しないホストディレクトリをルート以外のコンテナにマウントします

  29. 29

    存在しないボリュームディレクトリをディレクトリにマウント/リンクする

ホットタグ

アーカイブ