最終更新日: 2026-08-02
TOP(About this memo)) > 一覧(Docker) > 環境変数の渡し方
-e や --env で上書きできる。
ENV HOGE='FUGA' PIYO='PIYO PIYO'
ENV hoo bar
ENV my_path=$PATH のように書いても、ホスト側の環境変数は読み込まれず、イメージ内OSの環境変数が読み込まれるだけである点に注意。Dockerfileはホスト側の環境変数を直接呼び出せない。hoge='fuga'
docker build --tag my_alpine --build-arg my_app_version=$hoge .
export MY_SECRET='MySecretIsHimitsu'
docker run --rm \
--env HOGE="fuga" \
--env foo="bar" \
--env MY_SECRET \
alpine \
env
```
docker run --rm \
--env-file ./my_env_file.txt \
alpine \
env
```
--env-file で渡した値をシェル上で確認しようとすると、ホスト側の環境変数によって意図せず上書きされることがある。
--env-file で渡した値がそのまま出力される。docker run --env-file ./.env alpine echo $DOCKER_PREFIX
docker run --env-file ./.env alpine env
docker run --env-file ./.env alpine sh -c 'echo "$MEMO_DB_USER"'
echo $VAR の形はホスト側のシェルが変数展開してしまうため、コンテナに渡した環境変数を確認したい場合は sh -c 'echo "$VAR"' のようにコンテナ内で評価させる必要がある。environment / env_file キーの詳細な構文はDocker Composeを参照。docker compose run の引数として -e で渡すこともできる。docker-compose.yml側で environment に宣言しておく必要はない。docker compose run \
--rm \
-e HOGE=FUGA \
-e foo=bar \
サービス名 \
env
environment にキーだけ設定しておくと、ホスト側のシェルで定義されている環境変数がそのまま渡される。
services:
my_app:
image: alpine:latest
environment:
HOGE: FUGA
foo: bar
MY_SECRET:
export MY_SECRET='MySecretIsHimitsu'
docker compose run --rm my_app env
environment に値も入れると、そちらが優先されるようだ。docker compose run 実行時に -e XXXX=YYYY で指定した場合は、シェルの環境変数が上書きされるため、上記の2番と同様の扱いになると考えられる(IMO)。