docker

Dockerfile から上の階層のディレクトリを参照する

背景

プロダクトが動くコンテナの作成中に、プロダクトコードのrootに、Dockerfileを配置するのが気持ち悪かったので、

repository
 │
 ├ .docker
 │   ∟ Dockerfile
 │
 ├ product
     ∟ init.sh

のように、ディレクトリを掘ってそこに、コンテナ関連のコードを入れるようにしてました。
そして、
Dockerfileをbuildする際に、Dockerfileよりも上の階層にあるcodeをimageに含めようと

Dockerfile
COPY ../product/init.sh /usr/src/app/

と 記述したところ

COPY failed: Forbidden path outside the build context: ../product/init.sh ()

とエラーが吐かれ、buildに失敗しました。
だからといって、
Dockerfileをproject root に配置するのは、負けたきがするので、どうにかこの構成でbuildを行いたい!

そんな時の解決手段になります。

解決方法

-f optionを使いましょう!!

$ docker build -t {image name}:{tag} -f repository/.docker/Dockerfile .

-f で、Dockerfileの場所を指定できます。
このoptionを使う事で、 buildコマンド実行場所を docker build のカレントディレクトリとすることができるようになります。

課題

上記の解決方法だと、docker build コマンドをプロジェクトルート or その上の階層で実行する必要があります。
なので、build.sh なりを作成し、どこから実行しても 必ず、 想定した場所をカレントディレクトリにすることができると思うので、これは、今後の課題として、時間のある時 shell作成します。