🍎

Dockerのバージョンアップに伴って発生したエラーをMacOSのアップデートで解消した話

2024/09/18に公開

概要

  • docker engineをv4.32.0より上に上げると、dbコンテナup時にエラーが発生していた
  • エラー内容は assertion failed [result.value != EEXIST]: VmTracker attempted to allocate existing mapping というもの
  • MacOSのバージョンを13.6.6から14.7に上げることで解消した

環境

  • m2 Mac
  • MacOS 13.6.6
  • docker engine v4.32.0(rosseta2使用)

対象読者

  • 同環境で assertion failed [result.value != EEXIST]: VmTracker attempted to allocate existing mapping エラーに悩んでいる方

本題

ある日、docker engineのバージョンを軽い気持ちで新しくして、さて仕事しようかなと思ってコンテナを立ち上げたら、dbコンテナに見慣れないエラーが発生した

assertion failed [result.value != EEXIST]: VmTracker attempted to allocate existing mapping

何これ?
と思ってchatGPTに聞いてみると、以下のような返答が返ってきた

このエラーは、VmTracker attempted to allocate existing mapping というエラーメッセージから推測すると、Dockerが内部で使用する仮想メモリや仮想マシンのマッピングに関連する問題が発生していることを示しています。これは、特定のシステム環境やDocker Engineのバージョンに依存する可能性があります。

バージョンを v4.32.0 から v4.33.0 にアップグレードした際にこの問題が発生したことから、次のような要因が考えられます。

1. ARMアーキテクチャに対するサポートの変更
あなたのマシンがARMチップを使用している場合、特定のDockerバージョン間でARMに対するサポートに変更があった可能性があります。特に新しいバージョンで仮想メモリの管理方法やリソースの割り当てが変更されると、この種のエラーが発生することがあります。

2. 仮想メモリのマッピングの競合
エラーメッセージに「EEXIST」とありますが、これは既存のマッピングがあることを示すエラーです。Dockerが仮想マシンやコンテナの実行中に特定のメモリアドレスにマッピングしようとしたが、既に同じアドレスにマッピングが存在していた場合にこのエラーが発生します。この場合、特定のカーネル設定や仮想メモリの管理に関する設定の違いが原因である可能性があります。

3. Dockerのバグや不整合
特定のバージョンアップ時にDocker内部のバグや不整合が原因でこのエラーが発生することも考えられます。この場合、Dockerのバグトラッカーやフォーラムで類似の問題が報告されているか確認することが有効です。

何かバージョンアップの際に不要なファイルかキャッシュが残っちゃったのかな...?と思い、docker engineやPCを再起動してみたり、アンインストールして再インスコしてみたりするも解消しない

うーん?と思ってググったところ、この記事がヒット

https://github.com/docker/for-mac/issues/6905

最後の方のコメントで、MacOSを14系にしろと言っているので、それに倣ってMacOSを14.7に上げたところ、無事エラー解消

Discussion