2016-12-24 12 views
4

Dockerfileに "static"環境変数をENVで定義できますが、ビルド時にこの変数に値を渡すことは可能ですか?もちろん環境変数をdockerイメージにエクスポートするには?

FROM phusion/baseimage 

RUN mkdir -p /foo/2016/bin && \ 
    FOOPATH=`ls -d /foo/20*/bin` && \ 
    export FOOPATH 

ENV PATH $PATH:$FOOPATH 

を、私は日付、名前の異なるバージョンで変更されたディレクトリを作成し、何かを開梱/実行されていると思います実際のユースケースに:私は動作しません。これは、このような何かをしようとしていますディレクトリ名が変更されるたびにDockerfileを変更しないようにしたいと考えています。


は編集:それはこれまでのところ、最適な回避策ことはできません表示されますので、シンボリックリンクを使用している:

FROM phusion/baseimage 

RUN mkdir -p /foo/2016/bin && \ 
    FOOPATH=`ls -d /foo/20*/bin` && \ 
    ln -s $FOOPATH /mypath 

ENV PATH $PATH:/mypath 

答えて

4

ARGを使用して、ビルド時にに値を渡すには。

FROM phusion/baseimage 

RUN mkdir -p /foo/2016/bin && \ 
    FOOPATH=`ls -d /foo/20*/bin` && \ 
    export FOOPATH 

ARG FOOPATH 
ENV PATH $PATH:${FOOPATH} 

次にあなたがdocker build --build-arg FOOPATH=/dir -t myimage .


編集を実行することができます:あなたはコメントから、私の答えは、上記のあなたの問題を解決することはできません。 runコマンドの出力から更新できるDockerfileには何もありません。出力は解析されず、結果のファイルシステムだけが保存されます。このためには、イメージへのパスを書いて、/ etc/profileやカスタムエントリーポイントスクリプトから読んでみてください。それはコンテナとベースイメージをどのように起動するかによって異なります。

+0

'' ARG''と '' --build-arg''で使用する '' FOOPATH''が '' RUN''コマンド内のものと完全に無関係であることを正しく理解していますか?それは私のための解決策ではありません。あらかじめ完全には分からない「実行中」で何か起こった結果をエクスポートしたい。 – Jellby

+0

実際、私はrunコマンドの出力を使用しようとしていません。私は私の答えを更新しました。 – BMitch

関連する問題