[Docker] Error response from daemon: Container xxx is restarting, wait until the container is running の解決方法
Docker で Error response from daemon: Container xxx is restarting, wait until the container is running というエラーが発生したときの解決方法をご紹介します。
前提
Mastodon を Linode VPS で稼働させていたら物理ハードウェア障害に遭遇して、トラブル解消後にアプリケーションが乗ってる docker コンテナがエラー出しまくって起動しなくなったとういうお話です。
Docker エラーの状況調査
$ sudo docker exec -it mastodon_web_1 /bin/sh Error response from daemon: Container e398061d59d6cb20f3cdbbf4013e9e6e8080b8c1afc59d7b06b7d8c3f0dd1d47 is restarting, wait until the container is running |
まず mastodon_web_1 の shell に入れるか試しましたが無理でした。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 45ebb1c8ef61 gargron/mastodon "npm run start" 2 days ago Up 4 minutes 3000/tcp, 0.0.0.0:4000->4000/tcp mastodon_streaming_1 9d8bd45c983c gargron/mastodon "bundle exec sidek..." 2 days ago Up 4 minutes 3000/tcp, 4000/tcp mastodon_sidekiq_1 e398061d59d6 gargron/mastodon "bundle exec rails..." 2 days ago Restarting (1) 18 seconds ago mastodon_web_1 53e10f7f14d4 postgres:alpine "docker-entrypoint..." 3 days ago Up 4 minutes 5432/tcp mastodon_db_1 04f51c868073 redis:alpine "docker-entrypoint..." 3 days ago Up 4 minutes 6379/tcp mastodon_redis_1 |
docker ps でコンテナの状況を確認したところ Restarting (1) ステータスのまま起動しないようでした。
$ docker logs e398061d59d6 A server is already running. Check /mastodon/tmp/pids/server.pid. => Booting Puma => Rails 5.0.2 application starting in production on http://0.0.0.0:3000 => Run `rails server -h` for more startup options Exiting |
docker logs コマンドでログを確認してみると puma サーバーのプロセス起動で失敗していることがわかりました。
対応した手順
$ docker rm mastodon_web_1
mastodon_web_1 |
mastodon_web_1 はアプリケーションのコンテナなので docker rm コマンドで mastodon_web_1 を削除してしまいます。これがもし、データベースのコンテナだった場合 docker rm で削除できないので、他のアプローチを考えないといけません。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 45ebb1c8ef61 gargron/mastodon "npm run start" 2 days ago Up 19 minutes 3000/tcp, 0.0.0.0:4000->4000/tcp mastodon_streaming_1 9d8bd45c983c gargron/mastodon "bundle exec sidek..." 2 days ago Up 19 minutes 3000/tcp, 4000/tcp mastodon_sidekiq_1 53e10f7f14d4 postgres:alpine "docker-entrypoint..." 3 days ago Up 19 minutes 5432/tcp mastodon_db_1 04f51c868073 redis:alpine "docker-entrypoint..." 3 days ago Up 19 minutes 6379/tcp mastodon_redis_1 |
docker ps で mastodon_web_1 が無いことを確認します。
$ sudo docker-compose stop Stopping mastodon_streaming_1 ... done Stopping mastodon_sidekiq_1 ... done Stopping mastodon_db_1 ... done Stopping mastodon_redis_1 ... done |
docker-compose stop で全てのコンテナを停止して docker-compose up -d でコンテナを起動させます。
$ sudo docker-compose up -d Starting mastodon_redis_1 Starting mastodon_db_1 Starting mastodon_streaming_1 Starting mastodon_sidekiq_1 Creating mastodon_web_1 |
このとき mastodon_web_1 は無いので、新しくコンテナが作成されます。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 20ce27549e01 gargron/mastodon "bundle exec rails..." 5 minutes ago Up 5 minutes 0.0.0.0:3000->3000/tcp, 4000/tcp mastodon_web_1 45ebb1c8ef61 gargron/mastodon "npm run start" 2 days ago Up 5 minutes 3000/tcp, 0.0.0.0:4000->4000/tcp mastodon_streaming_1 9d8bd45c983c gargron/mastodon "bundle exec sidek..." 2 days ago Up 5 minutes 3000/tcp, 4000/tcp mastodon_sidekiq_1 53e10f7f14d4 postgres:alpine "docker-entrypoint..." 3 days ago Up 5 minutes 5432/tcp mastodon_db_1 04f51c868073 redis:alpine "docker-entrypoint..." 3 days ago Up 5 minutes 6379/tcp mastodon_redis_1 |
docker ps で無事に mastodon_web_1 が起動していることも確認できました。
まとめ
Mastodon で初めて Docker を使うことになった方はいきなりこういう対応をする必要が発生することになった方へのお役に立てれば幸いです。