OS起動時にDockerコンテナが起動しない

表題のような現象が起こった。OSを起動したら、停止時に動作していたコンテナがすべて起動するはずなのだが、traefikとportainerが起動しなくなった。

原因

原因は両者とも全くの不明。ログを見ても、手がかりになるものはなく、通常の起動との違いは見られないのだが、いきなり「exited with code 2」とか「exited with code 128」で停止してしまっている。

以前は起動していたのに、なぜいきなり起動しなくなったのか、まったくわからない。両者ともに詳細ログを出すオプションも不明。

コンテナを自動的に開始にあるように、restart: always, unless-stoppedを使っても無駄。なぜなら、

「再起動ポリシーが適用されるのは、コンテナの起動に成功した時のみです。この起動に成功という意味は、コンテナが少なくとも 10 秒起動し、Docker がコンテナの開始を開始してからです。これはコンテナが起動しないことで、再起動のループに陥らないようにするためです。」

対応

かなり原始的な方法だが、とりあえず以下のように対処する。

/etc/rc.localに以下を追加して、実行フラグをつける。

/opt/docker/force-run &

/opt/docker/force-runとして以下を記述して、実行フラグをつける。

#!/bin/sh
sleep 30
docker-compose -f /opt/docker/traefik/docker-compose.yml up -d
docker-compose -f /opt/docker/portainer/docker-compose.yml up -d

これで無事に自動起動してくれた。

ちゃんとした解決法

おそらくこのあたりがちゃんとした解決法だろうが、調べるのが面倒なので未着手。

もちろん、現代ではrc.localは使わないようだが、まだ見ていない。