Failed to allocate manager object, freezing.
のエラー発生
MacBook M3でDockerコンテナを実行する際に、以下のようなエラーメッセージが表示されて、コンテナが起動できない事象が発生しました。
Failed to allocate manager object, freezing.
どうやら、このエラーはsystemd
が必要なリソースにアクセスできないために発生しているようでした。
※特に、cgroups
に関連する問題が原因。
本記事では、このエラーの原因と解決方法について説明していきます。
エラーの原因
Failed to allocate manager object, freezing.
のエラーは、以下の理由で発生します。
-
cgroups
へのアクセス不足:-
systemd
はcgroups
を使用してリソース管理を行っています。なので、cgroups
へのアクセスが不足していると、systemd
は正常に初期化することができません。
-
-
必要なシステム権限の不足:
-
systemd
はシステム管理権限が必要です。なので、SYS_ADMIN
権限が不足していると、systemd
は正常に動作することができません。
-
解決方法
このエラーを解決するために、docker-compose.yml
ファイルを以下のように変更します。
1. docker-compose.yml
の修正
docker-compose.yml
ファイルに以下の変更を加えます。
version: ********
services:
reditor:
container_name: ********
build: ********
environment:
~略~
container: docker # 追加
volumes:
~略~
- /sys/fs/cgroup:/sys/fs/cgroup:ro # 追加
privileged: true
platform: linux/amd64
cap_add:
- SYS_ADMIN # 追加
command: ~略~
restart: always
ports: ~略~
stdin_open: true
tty: true
変更点の説明
1. container: docker
の追加
environment
セクションにcontainer: docker
を追加します。これにより、コンテナがDocker環境で実行されていることを明示的に設定して、コンテナ内での環境設定を行うようにします。
2. volumes
に/sys/fs/cgroup:/sys/fs/cgroup:ro
の追加
この設定は、ホストシステムのcgroup
ファイルシステムをコンテナ内にマウントします。これにより、コンテナがcgroups
を正しく認識できるようになり、systemd
がcgroups
にアクセスできるようになります。
3. cap_add
にSYS_ADMIN
の追加
SYS_ADMIN
権限を追加することで、コンテナがシステム管理操作を実行できるようになります。systemd
やその他のシステムサービスが正常に動作するためには、この権限が必要です。
2. Docker Engineの設定変更
Docker Desktopの設定でexec-opts
を以下の手順で追加します。
-
Docker Desktopを開く:
- MacのアプリケーションフォルダからDocker Desktopを開く。
-
設定を開く:
- 画面右上の歯車アイコンをクリックして設定を開く。
-
Docker Engine設定の編集:
- 左側のメニューから「Docker Engine」を選択する。
- 現在の設定を以下のように編集する。
Docker Engineの設定例:
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"exec-opts": ["native.cgroupdriver=cgroupfs"] # 追加
}
-
設定を保存して再起動:
- 設定を保存して、Docker Desktopを再起動する。
まとめ
これらの手順を実行することで、MacBook M3上でdocker-compose up
が正常に動作するはずです。
MacBook M3でdocker-compose up
を実行する際に発生するFailed to allocate manager object, freezing.
エラーは、cgroups
と必要なシステム権限の不足が原因です。docker-compose.yml
ファイルの設定を適切に変更し、Docker Engineの設定を更新することで、この問題を解決できます。
インターネット上の記事を探しても、chatGPTに尋ねても、この問題を
docker-composeコマンドを使って解決する情報が見当たらなかったので、
記事として残します。