1. ホーム
  2. docker

[解決済み] Dockerfileの条件付きENV

2022-11-28 07:24:03

質問

条件付きで ENV の値に基づいて Dockerfile に条件付きで設定することは可能ですか? ARG ?

例)以下のようなもの

ARG BUILDVAR=sad
ENV SOMEVAR=if $BUILDVAR -eq "SO"; then echo "hello"; else echo "world"; fi

更新:Marioさんの回答に基づく現在の使用状況です。

ARG BUILD_ENV=prod
ENV NODE_ENV=production
RUN if [ "${BUILD_ENV}" = "test" ]; then export NODE_ENV=development; fi

しかし --build-arg BUILD_ENV=test を実行して、ホストに行くと、まだ

docker run -it mycontainer bin/bash
[root@brbqw1231 /]# echo $NODE_ENV
production

どのように解決するのですか?

可能ですが、ビルド引数をフラグとして使用する必要があります。例えば パラメータ展開 というシェルの機能を使ってチェックすることができます。以下は、概念的なDockerファイルです。

FROM debian:stable
ARG BUILD_DEVELOPMENT
# if --build-arg BUILD_DEVELOPMENT=1, set NODE_ENV to 'development' or set to null otherwise.
ENV NODE_ENV=${BUILD_DEVELOPMENT:+development}
# if NODE_ENV is null, set it to 'production' (or leave as is otherwise).
ENV NODE_ENV=${NODE_ENV:-production}

ビルドをテストします。

docker build --rm -t env_prod ./
...
docker run -it env_prod bash
root@2a2c93f80ad3:/# echo $NODE_ENV 
production
root@2a2c93f80ad3:/# exit
docker build --rm -t env_dev --build-arg BUILD_DEVELOPMENT=1 ./
...
docker run -it env_dev bash
root@2db6d7931f34:/# echo $NODE_ENV
development