症状
docker run 時のコマンドに xvfb-run bundle exec rake resque:work
を指定して実行しようとしたが、フリーズしてしまい bundle exec rake resque:work
が行うはずの処理に進まないか、xvfb-run: error: Xvfb failed to start
というエラーメッセージが出て異常終了してしまう問題が発生した。
xvfb-run -e /dev/stdout bundle exec rake resque:work
としてデバッグしてみたところ、後者のパターンでは下記のようなログが出ているようだった。
(EE)
Fatal server error:
(EE) Server is already active for display 99
If this server is no longer running, remove /tmp/.X99-lock
and start again.
(EE)
解決方法
このコメントを参考にして、なぜか生成されてしまうロックファイルを削除するようにすると、うまく動くようになった。
(issue に書いてあるけど、イメージビルド時に削除してもダメらしい。)
bash -c "rm /tmp/.X99-lock || echo 'Lock not found, continuing normal setup' && xvfb-run bundle exec rake resque:work"
Xvfb むずかしくていつもはまるとなかなか直せないので、もう少し詳しくなってみたい。