[解決済み] 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
関連
-
[解決済み] Dockerfileの'COPY'と'ADD'コマンドの違いは何ですか?
-
[解決済み] DockerfileのCMDとENTRYPOINTの違いは何ですか?
-
[解決済み] Dockerfileにコメントを入れるにはどうしたらいいですか?
-
[解決済み] DockerfileのRUNとCMDの違いについて
-
[解決済み] Dockerfileのコピーでサブディレクトリ構造を維持する
-
[解決済み】Dockerfileにイメージ名を設定する方法は?
-
[解決済み] docker-compose start "ERROR: No containers to start".
-
[解決済み] Dockerで既存の名前付きボリュームにデータを追加する正しい方法は何ですか?
-
[解決済み] Linuxでdockerを停止する方法
-
[解決済み] Dockerコンテナ内でCurlコマンドを実行できない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Docker Compose: そのようなイメージはありません
-
[解決済み] docker-composeでDockerコンテナに固定IPを提供する
-
[解決済み] Docker compose、net:hostでコンテナを実行する。
-
[解決済み] docker login unknown shortorthand flag: 'e'
-
[解決済み] Alpine Dockerfile --no-cache Vs. rm /var/cache/apk/* の利点。
-
[解決済み] Log4j2 のログレベルをプログラムで変更する
-
[解決済み] Kubernetesのローカル開発環境を構築する方法とは?
-
[解決済み] Dockerで既存の名前付きボリュームにデータを追加する正しい方法は何ですか?
-
[解決済み] docker-compose build` と `docker build` の違いは何ですか?
-
[解決済み] Dockerにマウントされたボリュームは、Linuxスタイルのパスから変換する際にWindowsパスの最後に;Cを追加します。