ブログ
これまでに経験してきたプロジェクトで気になる技術の情報を紹介していきます。
Docker の steveltn/https-portal のコンテナが再起動ループして動かなくなった話
こんにちは!
最近 https-portal のコンテナが再起動ループ状態になって使えなくなって困っていたのですが、
原因と解決方法が分かったので解説します!
§ Prerequisite
ループ問題が発生した時の docker-compose.yml はこんな状態です。
動かす環境に合わせて https-portal の STAGE 等を変えても、
GIT の working tree に diff を発生させないように、
.env から 環境変数/environment を注入するようになっています。
./docker-compose.yml
version: "3.8"
services:
https-portal:
image: steveltn/https-portal
environment:
DOMAINS: "${HTTP_DOMAIN} -> http://nginx"
STAGE: "${HTTP_STAGE}"
restart: unless-stopped
./.env
HTTP_DOMAIN=localhost # localhost or fqdn
HTTP_STAGE=local # local or production
§ The problem
この状態で docker-composer up とするとうまく起動できずに終了してしまい、
さらに restart: unless-stopped の指定のせいで無限ループに入ってしまいます。
§ The cause
環境変数を確認してみましょう。
¶ Show container's environment variables
「Docker Desktop」を開き、
左メニューから「Containers / Apps」 を選択し、
「CONTAINERS」の一覧から「https-portal」 の container を選択して、
右上のタブ「👁️INSPECT」を選択します。
STAGE と DOMAINS を確認すると、
STAGE local # local or production
DOMAINS localhost # localhost or fqdn -> http://nginx
となっています。
だめですね。
コメントのつもりの部分まで渡ってしまっています。
これが原因で無限ループ地獄に入っていました。
§ The solution
.env の KEY=VALUE の形式の行末にコメントを書く場合は、
KEY='VALUE' とすると、うまく VALUE とコメントを切り分けられます。
./.env
HTTP_DOMAIN='localhost' # localhost or fqdn
HTTP_STAGE='local' # local or production
これで無限再起動ループせず普通に起動します!
§ The conclusion
発生した問題は無限再起動ループという現象という「は?」っていう感じですが、
原因は初歩的な .env の書き方にありました。
良かれと思って、 .env.example にコメントを追記したのですが、
そこから実際にコピーを作成して .env を再作成しないまま push してしまいました。
さらに普段は vuejs で開発している為、npm watch を動かし http://localhsot:3000 で php-fpm に直接接続するようにしています。
その場合は https-potal のコンテナは使いませんので発見が遅れていましました。
皆さんはこんなズボラなことはせず、キチンと確認しましょう!
以上です!
コメントはありません。