Dockerのディレクトリコマンドを変更しますか?


214

Dockerでこれをやりたいです:

git clone XYZ
cd XYZ
make XYZ

ただし、cdコマンドがないため、毎回フルパスを渡す必要があります(XYZ / fullpathを作成)。このための良い解決策はありますか?



6
WORKDIRコマンドも可能な回避策として記載されています
trcarden

1
、それは推奨ソリューションではないの回避策だdocs.docker.com/engine/userguide/eng-image/...
ジョン・ジョン・ピヒラー

回答:


151

スクリプト、またはRUNへのより複雑なパラメータを実行できます。これは、以前に確認するためにダウンロードしたDockerfileの例です。

RUN cd /opt && unzip treeio.zip && mv treeio-master treeio && \
    rm -f treeio.zip && cd treeio && pip install -r requirements.pip

「&&」を使用しているため、前のコマンドがすべて成功した場合にのみ、最後の「pip install」コマンドに到達します。

実際、すべてのRUNは新しいコミットと(現在は)AUFSレイヤーを作成するため、Dockerfileにコマンドが多すぎると、制限を使い果たすため、RUNのマージ(ファイルが安定している場合)は非常に困難になります。行うには便利なこと。


98
cdご参考までに、現在のRUNコマンドでのみ効果が持続します。次RUNは現在から始まりWORKDIRます。
リッチー

530

別のディレクトリに変更するには、WORKDIRを使用します。WORKDIRの後のすべてのRUN、CMD、およびENTRYPOINTコマンドは、そのディレクトリから実行されます。

RUN git clone XYZ 
WORKDIR "/XYZ"
RUN make


14
私はこれが質問に対するより適切な答えだと思います
フアン・レニ

1
これは複数のレイヤーを作成することに注意してください(私はそう思いますか?)
Sebi

これは受け入れられる答えになるはずです。テスト済み、動作確認
user1258361

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.