いくつかの理由から、ここでの答えのほとんどは私を助けませんでした(おそらくそれはDockerfileの私のFROMイメージに関連しています)
したがって、Dockerのビルド中に引数が空かどうかをチェックしてifステートメントを処理するために、bash script
と組み合わせてワークスペースにを作成することを選択しました--build-arg
Bashスクリプト:
#!/bin/bash -x
if test -z $1 ; then
echo "The arg is empty"
....do something....
else
echo "The arg is not empty: $1"
....do something else....
fi
Dockerfile:
FROM ...
....
ARG arg
COPY bash.sh /tmp/
RUN chmod u+x /tmp/bash.sh && /tmp/bash.sh $arg
....
Dockerビルド:
docker build --pull -f "Dockerfile" -t $SERVICE_NAME --build-arg arg="yes" .
備考:これはbashスクリプトのelse(false)に移動します
docker build --pull -f "Dockerfile" -t $SERVICE_NAME .
備考:これはif(true)に移動します
編集1:
何度か試した後、私は次の記事とこれを見つけました 1を
2つの物事を理解するために私を助けました:
1)FROMの前のARGはビルドの外にあります
2)デフォルトのシェルは/ bin / shです。これは、Dockerビルドでif elseが少し異なって機能していることを意味します。たとえば、文字列を比較するには、「==」ではなく「=」が1つだけ必要です。
だからあなたはこれを Dockerfile
ARG argname=false #default argument when not provided in the --build-arg
RUN if [ "$argname" = "false" ] ; then echo 'false'; else echo 'true'; fi
とでdocker build
:
docker build --pull -f "Dockerfile" --label "service_name=${SERVICE_NAME}" -t $SERVICE_NAME --build-arg argname=true .