問題
とりあえずローカルマシンに環境依存をなくしたいので、あらゆるものをdocker化したい。Local Emulator Suiteを今回やってみたが、公式のイメージはない模様。
自作してみて動くのは動くが、
$ docker-compose up
...
...
のように動かしておいて、ctrl+c
をして止めると再起動時にデータが保持されない。
これはfirebase emulators:start --import data --export-on-exit
として起動しても変わらず...
原因
どうもdocker-compose側でctrl+c
をサービス内まで届けてない?様子で色々検索して試したがうまいことINTシグナルを渡すことができなかった。
$ docker-compose -v
docker-compose version 1.29.1, build c34c88b2
試したこと
これは一見動きそうだが、ctrl+c時にtrapされている様子はなかった。
これを使ってdocker-compose down
の代わりにdocker exec container_name firebase emulators:export -f export/data
とかしてみてもtrap事前にサービスが止められてる感じだった。
解決方法
この人のパターンのように定期的にデータをexportするようにした。
shellはよく分からないのでrubyで...
loop do
sleep 10
puts "###############"
puts "exporting ..."
puts "###############"
system("firebase emulators:export -f export/data")
end
ruby ./export.rb &
firebase emulators:start --import export/data
こうすることで10秒置きにとりあえずデータは保持されるので、なんとかなる。
export
はdocker-composeで指定しているvolume
firebase:
...
...
volumes:
- export:/firebase/export
...
...
volumes:
export: {}