概要
docker run をするときに -e
で環境変数を設定することができます
しかし stop -> start や restart するときに -e
オプションを使って環境変数を設定することができません
そうするとわざわざコンテナを rm する必要が出てきます
rm しないでも環境変数を設定することができたのでその方法を紹介します
環境
- Ubuntu 16.04.3
- docker 17.05.0-ce
- Admiral v1.3.0
とりあえず起動する
docker run -d -p 80:80 --name web nginx
これで HOGE という環境変数を確認してみます
docker exec web /bin/bash -c 'echo "${HOGE}"'
当然ですが空文字が返ってきます
コンテナを一旦停止する
起動した nginx コンテナを一旦停止しましょう
- docker stop web
dockerd も停止する
デーモンも停止する必要があります
(これをしなければいけないのがちょっと残念な感じがします)
- systemctl stop docker
config.json を直接編集する
コンテナを編集したらコンテナの設定ファイルを直接編集して環境変数を設定しましょう
- vim /var/lib/docker/containers/837764235c60d5035ec5ad7848b03724e1245d99802edd6cb72a9d8895a453b0/config.v2.json
コンテナ ID の部分は適宜変更してください
この JSON ファイルに Env という定義の部分があるのでそこに環境変数を記載します
"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","NGINX_VERSION=1.13.8-1~stretch","NJS_VERSION=1.13.8.0.1.15-1~stretch","HOGE=hoge"]
改行などインデントなど整形がされていないので少し見づらいですが Env の箇所を見つけて上記のように編集しました
dockerd とコンテナを起動する
停止していたプロセスとコンテナを起動していきます
- systemctl start docker
- docker start web
環境変数が設定されているか確認する
先ほどの環境変数を表示するコマンドを再度実行してみましょう
docker exec web /bin/bash -c 'echo "${HOGE}"'
すると hoge が返ってくるようになっていると思います
最後に
一度 run で起動したコンテナに対して削除せずに環境変数を設定する方法を紹介しました
もしかするとこんなことをしないでも今後のアップデートで restart 時に設定できるようになるかもしれません
dockerd も停止する必要があるのでプロダクション環境だと他のコンテナにも影響するので使えない場合が多いかもしれません
一応知っておいて損はないと思うので紹介しました
また Docker for Mac の場合は一度 moby にログインしてからファイルを編集する必要があるので注意してください
moby に関してはこちらで紹介しています
0 件のコメント:
コメントを投稿