45
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-01-31

背景

プロダクトが動くコンテナの作成中に、プロダクトコードの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作成します。

45
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
45
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?