コンテナから外部データベースにアクセスするにはどうすればよいでしょうか? 接続文字列にハードコードするのが最善の方法でしょうか?
# Dockerfile
ENV DATABASE_URL amazon:rds/connection?string
ベストアンサー1
-e
(alias --env
) フラグを使用して、コンテナに環境変数を渡すことができます。
docker run -e xx=yy
起動スクリプトの例:
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 [...]
環境変数が多数あり、特に秘密にしておきたい場合は、envファイルを使用する:
$ docker run --env-file ./env.list ubuntu bash
--env-file フラグはファイル名を引数として受け取り、各行は --env に渡される引数を模倣した VAR=VAL 形式である必要があります。コメント行には # をプレフィックスとして付ける必要があります。