0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Dockerの環境変数の挙動確認

Last updated at Posted at 2024-11-03

概要

(自分メモ)Dockerでの環境変数に関する実証
何事も実際やってみないとね

まとめ

Dockerfile定義 --build-arg指定
/ 環境変数
build時
$A/$E
run時-e指定
/ 環境変数
run時$E
未定義 - 未定義 なし 未定義
ARG A A / 未定義 未定義 - 未定義
ARG A A / "env" "env" - 未定義
ARG A A="custom" / - "custom" - 未定義
ARG A="default" A / 未定義 "default" - 未定義
ARG A="default" A / "env" "env" - 未定義
ARG A="default" A="custom" / - "custom" - 未定義
未定義 - 未定義 E / 未定義 未定義
未定義 - 未定義 E / "env" "env"
未定義 - 未定義 E="custom" / - "custom"
ENV E="default" - "default" E / 未定義 未定義
ENV E="default" - "default" E / "env" "env"
ENV E="default" - "default" E="custom" / - "custom"

検証用Dockerfile

テスト用Dockerfile
FROM ubuntu:24.04

#ARG A0 is undefined
ARG A1
ARG A2="A2_default"

#ENV E0 is undefined
ENV E1=$A1
ENV E2="E2_default"

RUN printenv|sort
CMD ["/bin/sh","-c","(printenv|sort)"]

ARG

sudo -E docker build --no-cache --build-arg A0=A0_custom --build-arg A1=A1_custom --build-arg A2=A2_custom -t t1 .
A1=A1_custom
A2=A2_custom
E1=A1_custom
E2=E2_default
  • Dockerfileで未定義のA0は、 --build-arg A0=A0_customを与えても未定義
  • 初期値が与えらてないA1は環境変数として未定義
  • E1は初期値"$A1"(="A1_custom")として定義される
A0=A0_env A1=A1_env A2=A2_env sudo -E docker build --no-cache --build-arg A0 --build-arg A1 --build-arg A2 -t t1 .
A1=A1_env
A2=A2_env
E1=A1_env
E2=E2_default
  • ビルド中環境変数の内容がセットされる
  • Dockerfileで未定義のA0は、 --build-arg A0で環境変数を与えても未定義
sudo -E docker build --no-cache --build-arg A0 --build-arg A1 --build-arg A2 -t t1 .
A2=A2_default
E1=
E2=E2_default
  • A0は、Dockerfileで未定義の場合、常に未定義となる
  • --build-arg A1で環境変数が未定義の場合、未定義となる
  • --build-arg A2で環境変数が未定義の場合、デフォルト値(A2_default)となる

ENV

検証用コンテナビルド: sudo -E docker build --no-cache -t t1 .
A2=A2_default
E1=
E2=E2_default
sudo docker run --rm t1
E1=
E2=E2_default
  • ARGで指定した環境変数はrun時には表れない
sudo docker run -e E0=E0_custom -e E1=E1_custom -e E2=E2_custom --rm t1
E0=E0_custom
E1=E1_custom
E2=E2_custom
  • -e E0=により、実行時に環境変数を与える。デフォルト値が不要ならDockerfile中にENV指定不要(ARGと異なる)
sudo docker run -e E0 -e E1 -e E2 --rm t1
()
  • -e E1により、実行時、環境変数E1が未定義なら未定義となる。Dockerfileで定義された初期値ではないので注意(ARGと異なる)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?