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_1 と tileserver_raster-tileserver_2 を削除。
$ docker rm 9167fc18350d 83b0fffca937
再度 docker-compose up,必要に応じて docker-compose scaleでインスタンスを増やして復旧。
やっておきたいこと
サーバーが再起動した時に上記解決策で実施したコマンドを自動で流すScriptを仕込んでおくと安心して眠れそうです。
AzureのVMを使っているのですが、Azureは再起動を伴うメンテナンスが発生することがままあるので
勝手に再起動されても大丈夫な仕組みを残しておくと障害回避になりますね。