docker for Macでdockerのプロセスがゾンビ化する
docker-composeで新しいdockerコンテナが起動しない時の確認点です。
以前のdockerのプロセスがゾンビ化している可能性があるようです。
tl; dr
LISTEN中のポートを調べ、ゾンビプロセスを特定する。ゾンビプロセスをkillする。
ただし、Dockerが落ちてしまうので、LaunchPadから手動で再起動する。
#LISTEN中のポートの確認 sudo lsof -i -P | grep "LISTEN" #プロセスの削除 kill -9 [該当するPID]
dockerのプロセスがゾンビ化
よくある現象のようで、Webで検索すると同じ症状の報告が沢山あります。
unicorn.limited
自分の場合は、以下のような現象が起こりました。
- docker-composeでnginxと自作Goサーバー2つを立ち上げたり落としたりすると3回に1回くらいどれかがゾンビ化する。
- docker-compose up -d でエラーが出る。
こいつはゾンビがポートをつかんでいるせいですね。
ERROR: for server Cannot start service server: driver failed programming external connectivity on endpoint server ( [xxxxxx] ): Timed out proxy starting the userland proxy
- docker-compose downでエラーが出る。
ERROR: for [xxxxxx] UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=70)
- docker stop [dockerコンテナ名]で削除しても削除に非常に時間がかかる。
kill -9を武器にゾンビバスター
仕方ないのでkill -9でkillして回りました。ただ、Docker自体が落ちてしまうのでかなり乱暴なやり方です。できれば穏便な解決方法が知りたいので、良い方法があれば教えてください。