2017-01-12 1 views
0

私が持っているDockerfile、他のディレクティブの中で、次があります。これは、ドッキングウィンドウコンテナを構築するためのアプリケーションリポジトリのルートから実行されることを意図しているDockerビルドを開始するディレクトリは何ですか?

FROM node:alpine 
RUN cd /tmp && \ 
    # several lines downloading/installing packages from zips 

... 

ADD src/config.json /myapp/config.json 

WORKDIR /myapp 

を。 RUNコマンドは、アプリケーションの依存関係が発生しているため早期に配置されます。これは論理的にはプロセスの早い段階で発生するはずです。 (レイヤ数を少なくするためにコマンドをまとめてチェーンしています)。しかし、ADDコマンドは、Dockerfileと同じ場所、つまりリポジトリのルートにあることを前提としています。

これを考えれば、ドッカーのビルドの開始位置を「覚えて」いる方法があります。これを使用してADDの向きを決めますか? (具体的には、ローカルの開発環境でこれを実行すると、ビルドサーバーよりビルド時にwhereamiが異なるでしょう)。あるいは、これらのコマンドをインターリーブして最初に構成をコピーしてから依存関係をダウンロードしますか?

私が構築した場合、私は(それがsrcフォルダが含まれています)私のプロジェクトのルートディレクトリからこれをやっている:

docker build -t myapp:dev . 

私が手にエラーがある:SRC/configにLSTAT

.json:私はRUN pwdを挿入した場合、そのようなファイルやディレクトリ

なしドッキングウィンドウビルドが/であるとして、それを報告し、しかし、これが「コンテキスト」であると考えられるかどうかはわかりません(つまり、ADDコマンドはpwdに関連しています)。

+0

このドキュメントのリンクが役立つ場合があります - https://docs.docker.com/engine/getstarted/step_four/ – Rao

+0

@Raoあなたはそのドキュメントの特定の部分を持っていますか(もちろん、すでに読んでいます)その質問への答えを照らすだろうか? –

答えて

3

docker buildコマンドには、ビルドを実行するためにドッカーエンジンに送信するコンテキストへのパスという1つの必須パラメータがあります。このパスは通常.の1つで、結果のコマンドはdocker build -t myimage:latest .のようになります。 ADDCOPYコマンドはすべて、そのコンテキストからファイルを取り込みます。上記の例では、docker buildコマンドを実行した現在のディレクトリが使用されます。 docker buildコマンドを実行するサーバーと各ユーザーは、ローカルマシン上にある作業ディレクトリを渡すだけで済みます。

あなたはADDCOPYコマンドの動作を変更するために行うことができる唯一の他の事はあなたのコンテナ内のコマンドの相対パスを定義していますが、ファイルはあなたが送っ文脈から引き出される場合には影響しませんWORKDIRを変更することですあなたのビルドコマンドで。

+0

私は非常に混乱しています。それで、 'ADD'は 'context'ディレクトリに何も見つからないようです。 (質問の更新を参照してください)あなたが記述する方法は私が期待したものですが、何かが間違っています。ドッカーがコンテキストディレクトリ(または現在のworkdir)と見なすものを確認する方法はありますか? –

+0

現在のディレクトリコンテキストを印刷する方法は、[この回答](http://stackoverflow.com/a/40966234/596285)を参照してください。 – BMitch

+0

これは私が[ここに記述する]コメントの問題だったことが分かります(http://stackoverflow.com/questions/41642784/dockerfile-build-yielding-lstat-error-on-add/41642977?noredirect=1#comment70485867_41642977)より明確に。私は完全な実際の行を含めるべきだった。コンテキストのリードに感謝! –

関連する問題