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は使わないようだが、まだ見ていない。