福冨諭の福冨論

RSSリーダーではこちらをどうぞ→https://feeds.feedburner.com/fuktommy

Docker Compose の設定ファイルで循環参照のようなことが起きていた

docker-compose がなんか急に

Service 'mysql' failed to build: max depth exceeded

っていうエラーを出して起動(正確にいえばビルド)できなくなっちゃったので困ってたんですが、なにしろこれずっと前に引き継いだだけでDocker素人なのでね、数日間悩んだけどなんとなく解決しましたという話。

docker-compose.yml が

version: '2'
services:
mysql:
image: mysql:5.6
build: ./db
(略)

って感じで、これもうわかったよって人もいるだろうけど、dbディレクトリ下のDockerfileが

FROM mysql:5.6

ってなってる。ドキュメントによるとimage単体だと元になるイメージの指定、buildと組み合わせると生成物につける名前ということになるっぽい。というわけで今回の設定ファイルは

  1. mysql:5.6 をもとにビルドする
  2. それを mysql:5.6 と名付ける
  3. 次回のビルドでは前回作った mysql:5.6 をもとにビルドする
  4. それを mysql:5.6 と名付ける
  5. 次回のビルドでは…

というように延々とビルドが続いていき、中間イメージの連鎖が一定数を超えたところでエラーになったっぽい。image: mysql:5.6 の行を削除して docker rmi mysql でイメージを消したら解決。