開発環境構築にDockerを使っているのですが、急にDockerのイメージが作れない現象に遭遇しました。
docker-compose build
を実行すると次のエラーが帰ってきます。
Service 'db' failed to build: max depth exceeded
(サービス 'db'のビルドに失敗しました:最大深度を超えました)
ちなみに、db
と言うのは、MySQLのイメージから作ったコンテナのことです。
イントロダクション
この記事で得られること
max depth exceeded
の解消方法がわかる。
環境
項目 | バージョン |
---|---|
docker | 18.03.1-ce-mac65 |
注意
今回は、正確な原因究明までに至っていません。。
最終的な解決策や、エラーが起きた時の状況をまとめた記事です。
ご了承ください。
解決方法
結論から言うと、db
コンテナとMySQLのイメージを削除しました。
docker ps -a
とdocker images
を駆使して親子関連を探し、関連しているイメージとコンテナをひたすら消す作業をしました。
全て消した状態で改めてdocker-compose build
を実行すると、新しくコンテナが作れます。
原因の考察
中間レイヤーには上限があると思われます。
docker build
、及び、docker-compose build
でコンテナを作ると、dockerfileの処理を中間レイヤーという単位でキャッシュします。
この中間レイヤーがあるので、2回目以降のビルドも不必要に処理をしません。
しかし、今の今まで特に中間レイヤーの管理をしてこなかったので、キャッシュの解放ができずオーバーフローをしてしまったのだと考えられます。
中間レイヤー
と言うのは、あくまでネット上で取り上げられている名前で、公式の言い方では無いかもしれません。
キャッシュを保持できる上限がどこで設定されているかは調査できていませんが、私の場合は200件近いキャッシュが残っていました。
参考
未解決の状態で、コンテナを確認すると次のような情報が得られます。
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f8ebd1b437de fa721c8cb317 "docker-entrypoint.s…" 27 minutes ago Created hopeful_mcnulty 0274d3a2f4d6 fa721c8cb317 "docker-entrypoint.s…" 31 minutes ago Created stoic_spence 3b89a4f931ae fa721c8cb317 "docker-entrypoint.s…" 36 minutes ago Created quirky_mclean ef7b2ab8afa6 fa721c8cb317 "docker-entrypoint.s…" 8 hours ago Created fervent_mclean 34710ad15e02 fa721c8cb317 "docker-entrypoint.s…" 8 hours ago Created distracted_hopper 2e1f3e23dae2 fa721c8cb317 "docker-entrypoint.s…" 8 hours ago Created suspicious_jennings 4b58c524cd63 fa721c8cb317 "docker-entrypoint.s…" 9 hours ago Created trusting_bartik 5facdda63d00 fa721c8cb317 "docker-entrypoint.s…" 9 hours ago Created eloquent_kowalevski b94160121d6c fa721c8cb317 "docker-entrypoint.s…" 9 hours ago Created sad_banach
このイメージfa721c8cb317
に親に当たるイメージはmysql
の公式イメージです。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest fa721c8cb317 10 hours ago 371MB #省略
実際に、mysqlのイメージを削除すると、キャッシュと思われる情報が一斉に消えていきます。
$ docker rmi fa721c8cb317 Untagged: mysql:latest Deleted: sha256:**************************** Deleted: sha256:**************************** Deleted: sha256:**************************** ... # 200件近い数
全て消えた状態で、docker-compose build
を実行すると問題なくコンテナを作れます。