tileserver-glのDockerContainerがRestartを繰り返す場合の対処法


What's happen?

業務でOpenMapTilesというMapbox Vector Tileを利用した地図配信サーバを作成しているのですが、
サーバー再起動やdocker-composeでcontainerを再起動した際に永遠とRestartを繰り返し
containerが起動しないという事件が発生しておりました。

暫定対応ですが、対処法がわかったのでメモです。

OpenMapTileやtileserver-glについてはsmellmanさんのブログをご覧ください。
OpenMapTiles/Tileserver-GL/MaputnikによるMapbox Vector TileのOSS実装環境のまとめ

原因

既知の問題のようで、tileserver-glのGitHubでもissueに上がっていました。
モジュールの起動が完了する前にtileserverの起動が走ってしまうのが原因のようです。

Sleepの処理を追加して5分待つようにしているようですが、それでも時間が足りず起動できません。

解決策

暫定対応ですが、container imageを削除して再度docker-compose upすることで解決しました。

まずは削除対象のcontainerを確認します。

$ docker ps -a
CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS                     PORTS                              NAMES
9167fc18350d        klokantech/tileserver-gl   "/bin/bash /usr/src/a"   21 hours ago        Up 21 hours                80/tcp                             tileserver_raster-tileserver_2
9f3cb6e08a8e        eeacms/varnish             "/docker-entrypoint.s"   21 hours ago        Up 21 hours (healthy)      0.0.0.0:6081->6081/tcp, 6085/tcp   tileserver_varnish_1
6dff869ac649        klokantech/tileserver-gl   "/bin/bash /usr/src/a"   21 hours ago        Up 21 hours                0.0.0.0:8080->80/tcp               tileserver_vector-tileserver_1
83b0fffca937        klokantech/tileserver-gl   "/bin/bash /usr/src/a"   21 hours ago        Up 21 hours                80/tcp                             tileserver_raster-tileserver_1

tileserver_raster-tileserver_1tileserver_raster-tileserver_2 を削除。

$ docker rm 9167fc18350d 83b0fffca937

再度 docker-compose up,必要に応じて docker-compose scaleでインスタンスを増やして復旧。

やっておきたいこと

サーバーが再起動した時に上記解決策で実施したコマンドを自動で流すScriptを仕込んでおくと安心して眠れそうです。
AzureのVMを使っているのですが、Azureは再起動を伴うメンテナンスが発生することがままあるので
勝手に再起動されても大丈夫な仕組みを残しておくと障害回避になりますね。