1. ホーム
  2. docker

[解決済み] Dockerコンテナに環境変数を渡すにはどうしたらいいですか?

2022-03-18 12:36:52

質問

Dockerの初心者なのですが、コンテナから外部データベースにアクセスする方法が不明です。接続文字列をハードコードするのが一番良い方法なのでしょうか?

# Dockerfile
ENV DATABASE_URL amazon:rds/connection?string

解決方法は?

コンテナに対して環境変数を渡すには -e フラグを使用します。

起動スクリプトの例です。

sudo docker run -d -t -i -e REDIS_NAMESPACE='staging' \ 
-e POSTGRES_ENV_POSTGRES_PASSWORD='foo' \
-e POSTGRES_ENV_POSTGRES_USER='bar' \
-e POSTGRES_ENV_DB_NAME='mysite_staging' \
-e POSTGRES_PORT_5432_TCP_ADDR='docker-db-1.hidden.us-east-1.rds.amazonaws.com' \
-e SITE_URL='staging.mysite.com' \
-p 80:80 \
--link redis:redis \  
--name container_name dockerhub_id/image_name

また、値が表示されるコマンドライン上に値を置きたくない場合は ps などがあります。 -e を付けずにそのまま渡せば、現在の環境から値を引っ張ってくることができます。 = :

sudo PASSWORD='foo' docker run  [...] -e PASSWORD [...]

多くの環境変数があり、特にそれが秘密であることを意味している場合、次のようにすることができます。 環境ファイルを使用する :

$ docker run --env-file ./env.list ubuntu bash

env-file フラグは引数としてファイル名を取り、各行は VAR=VAL 形式で、 --env に渡された引数を模倣することを期待します。コメント行の先頭には # を付けるだけでよい。