2016-07-18 20 views
13

docker buildの間にビルド引数を必須にする方法はありますか?引数がないと、ビルドが失敗することが予想されます。次Dockerfileため例えばDockerビルド時にビルド引数を必須にする方法は?

、:私はdocker build -t my-tag .で構築されたときARG MY_VARIABLEで失敗しdocker build -t my-tag --build-arg MY_VARIABLE=my_value .で構築されたときに渡すために、ビルドをしたいと思います

FROM ubuntu 

ARG MY_VARIABLE 
ENV MY_VARIABLE $MY_VARIABLE 

RUN ... 

この動作を達成する方法はありますか?私の場合、デフォルト値を設定しても本当にトリックはありません。

(私はdarwin/amd64にドッカー1.11.1を実行しているよ。)

EDIT: 私は考えることができることを行う方法の1つはMY_VARIABLEが空の時に失敗したコマンドを実行することです、例えば:

FROM ubuntu 

ARG MY_VARIABLE 
RUN test -n "$MY_VARIABLE" 
ENV MY_VARIABLE $MY_VARIABLE 

RUN ... 

しかし、それは当面の問題の非常に慣用的な解決策ではないようです。あなたはこのような何かを行うことができ

+0

定義されていないargが渡されると失敗するのは少し奇妙ですそれ以外の方法ではありませんが、それはそれが動作する方法であるようです。 dockerfileの後半のステップとして "test.sh"スクリプトを実行して、一連の条件をチェックし、それらを適切に処理することができます。複雑さによっては、別々のファイルとして管理する方が簡単かもしれません。それが1つか2つのARGであれば、あなたのインライン方法が実際に最高かもしれません。 – ldg

答えて

6

...

FROM ubuntu:14.04 
ONBUILD ARG MY_VARIABLE 
ONBUILD RUN if [ -z "$MY_VARIABLE" ]; then echo "NOT SET - ERROR"; exit 1; else : ; fi 

その後docker build -t my_variable_base .

それはスーパーきれいではありません

FROM my_variable_base 
... 

これに基づいて画像を...構築し、しかし少なくとも、それはベースのイメージに「吹き出物」のものを抽象化します。

+0

'ONBUID'を使用しているときは、それらを削除したときだけ動作しません。 –

6

"RUN test -n"でテストしたところ、元の(編集)ポストで述べた@konradstrackは、ドッカービルドコマンドのビルド時間引数として渡される変数を指定しているようです。

FROM ubuntu 

ARG MY_VARIABLE 
RUN test -n "$MY_VARIABLE" 
ENV MY_VARIABLE $MY_VARIABLE 
+0

これは良い答えです。テストは簡単で、失敗すると十分な文脈を提供します。 – Subfuzion

3

これを実現するにはshell parameter expansionを使用することもできます。 、あなたも使用したいと思う。もちろん、

FROM debian:stretch-slim 
MAINTAINER Evel Knievel <[email protected]> 

ARG MANDATORY_BUILD_ARGUMENT 

RUN \ 
# Check for mandatory build arguments 
    : "${MANDATORY_BUILD_ARGUMENT:?Build argument needs to be set and non-empty.}" \ 

# Install libraries 
&& apt-get update \ 
&& apt-get install -y \ 
     cowsay \ 
     fortune \ 

# Cleanup 
&& apt-get clean \ 
&& rm -rf \ 
     /var/lib/apt/lists/* \ 
     /var/tmp/* \ 
     /tmp/* \ 

CMD ["/bin/bash", "-c", "/usr/games/fortune | /usr/games/cowsay"] 

のはあなたの義務ビルド引数はMANDATORY_BUILD_ARGUMENTと呼ばれているとしましょう、そしてあなたはあなたのDockerfileはこのようになり、空でない設定とすることにしたいです私とは違ってビルド・アーギュメントだが、このDockerfileをビルドしてテスト実行することをお勧めします:)

+1

美しい構文のためのUpvoting – sleepycal

+0

ありがとう、私はそれを感謝する:) –

関連する問題