randddevimageをビルドする際にDockerfileのあるdirectoryの外部のファイルを参照した経験より(2021-03-14)Dockerimageをビルドする際にDockerfileのあるdirectoryの外部のファイルを参照した経験より(2021-03-14)畑田です。ホワイトデーですね(執筆時)。file群のみをHTTPサーバ(今回はnginx)から配信する方針を選択しました。ECRにDjangoとnginxのimageを置いておいて、container生成を行っています。file群はnginxのDockerfile以下に無いため、Dockerfile内での記述方法がわからず困ってしまいました。基本を勉強し直すことで解決できたので記録に残します。1.41問題まず、今回のプロジェクトのディレクトリ構造は以下の様です。(docker-compose.ymlやsql/以下は当記事とは無関係です。file群をnginxサーバーに置くことがゴールです。Dockerfileにおいて、local側のpathはDockerfileのあるdirectory以下の階層しか指定できないのです。local側のpathは./以下しかDockerfileには記述できません。今回、nginx/Dockerfileからserver/src/static/への相対pathは../sever/src/static/であるため、nginx/Dockerfileで管理できないのではないかと悩みました。基本を復習Dockerfileからimageをビルドするコマンドでよく使うのは以下です。.そもそも-tオプションは--tagオプションの省略形で、imageにnameとtag(tagはオプショナル)をつけるためのものです。directoryを指定します。これについて、僕は参照したいDockerfileの位置するdirectoryを指定するものだと勘違いしていました。(これを勉強し直すことで今回のお悩みは解決されました。)さて、よく使うオプションは--tagの他に--fileがあります。--fileオプションでは、Dockerfileとして使用するfileへのpathを指定することができます。directoryのDockerfileを探して読み込みますが、実際はここで指定してやれば、なんという名前のものでも良いです。imageのためのものを用意したりできます。実際に打ったコマンド答えです。プロジェクトのrootに移動して、以下のコマンドを打ちます。.nginx/Dockerfileの内容は以下です。directoryにroot(.)を指定しているところです。directoryが違うのです。することによって、Dockerfileにとっての./が、rootを表すため、../を使わずにserver/src/static/にpathを通すことができる様になります。以下の様なコマンドも同義です。directory(引数である../)のDockerfileという名前のファイルを探してしまうためです。今回はこのコマンドを打っているdirectoryにDockerfileがあるのでこの様に指定しました。実現したいこと自体はコマンドを正確に使えば十分表現できることでした。buildコマンドについて、以下の様に整理しておきます。directoryを指定します。--fileオプションは参照したいDockerfileへのpathを指定するもので、デフォルトでは引数で指定したdirectory内のDockerfileという名前のファイルを探して参照します。directory(./)として記述し、ビルドするときの引数にも親階層を指定してあげれば実現できます。directoryが違うので--fileオプションが必要であるということです。コメントをキャンセルメールアドレスが公開されることはありません。付いている欄は必須項目ですコメント名前*メール*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。WordPress.。