たそらぼ

日頃思ったこととかメモとか。

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 desktop community v2.1.0.1
macOS Sierra v10.12.5

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自体が落ちてしまうのでかなり乱暴なやり方です。できれば穏便な解決方法が知りたいので、良い方法があれば教えてください。