さらに別のDockerシンボリックリンクの質問。すべてのDockerビルドにコピーしたいファイルがたくさんあります。私のディレクトリ構造は次のとおりです。
parent_dir
- common_files
- file.txt
- dir1
- Dockerfile
- symlink -> ../common_files
上記の例では、dir1内にdocker buildするときにfile.txtがコピーされるようにします。しかし、file.txtの複数のコピーを保持したくありません。 このリンク、Dockerバージョン0.10以降 ごとに、Dockerビルドは
ADDビルド手順については、コンテナのルート内のシンボリックリンクに従ってください。
しかし、Dockerfileで次のいずれかの行を使用してビルドすると、そのようなファイルまたはディレクトリはありません:
ADD symlink /path/dirname
またはADD symlink/file.txt /path/file.txt
マウントオプションはそれを解決しません(クロスプラットフォーム...)。 tar -czh . | docker build -t
を試しましたが成功しませんでした。
Dockerがシンボリックリンクをたどり、common_files/file.txtをビルドされたコンテナにコピーする方法はありますか?
それは不可能であり、実装されません。 github issue#1676についての議論 をご覧ください。
繰り返しできないため、これは許可しません。マシン上のシンボリックリンクは私のマシンと同じではなく、同じDockerfileは2つの異なる結果を生成します。また、/ etc/paasswdへのシンボリックリンクがあると、ローカルファイルではなくホストファイルをリンクするため、問題が発生します。
この問題を抱えている他の人については、 このリンクを参照 にしてください。個人的には、「共通ベースイメージの構築」ソリューションを選択しましたが、これは見事に機能します。
1つの可能性は、親ディレクトリでビルドを実行することです:
$ docker build [tags...] -f dir1/Dockerfile .
(または同等に、子ディレクトリ内)
$ docker build [tags...] -f Dockerfile ..
Dockerfileは、適切なパスでコピー/追加を行うように構成する必要があります。設定によっては、親に.dockerignore
を追加して、コンテキストに入れたくないものを除外することができます。
simlinksを使用する代わりに、simlinksをコピーまたは作成する代わりに、sites_availableからsites_enabledにファイルを移動するだけで、管理上の問題を解決できます。
したがって、サイトの構成は、停止した場合はsite_availableフォルダー、または使用する必要がある場合はsites_enabledフォルダーの1つのコピーのみになります。