お問い合わせ

ブログ

これまでに経験してきたプロジェクトで気になる技術の情報を紹介していきます。

Docker の steveltn/https-portal のコンテナが再起動ループして動かなくなった話

NMC NMC 3 years
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 のコンテナは使いませんので発見が遅れていましました。

皆さんはこんなズボラなことはせず、キチンと確認しましょう!

以上です!

Docker の steveltn/https-portal のコンテナが再起動ループして動かなくなった話 2021-12-20 14:42:30

コメントはありません。

4730

お気軽に
お問い合わせください。

お問い合わせ
gomibako@aska-ltd.jp