Failed to get D-Bus connection: Operation not permitted
が出た場合の対処法まとめ
色々な場所で色々な対処法が書かれていますが、結論として以下の2つが必要です。
- privilegedを有効(true)にする
- /sbin/initで起動実行する
片方だけ指定して、うまくいかないな〜とかなっていませんか?(僕です)
privileged を有効(true)にする
privileged は、特権モードという意味です。これがデーモンを操作するのに必要な権限になりますが、デフォルトでこれがOFFになっているため起動できていないという事になります。
/sbin/initで起動実行する
起動時にサービスを開始し、ランレベルを設定してくれます。これでprivilegedが有効になった状態で読み込みしてくれるようになります。
docker runの場合
起動時のコマンドに以下を追加する
--privileged
/sbin/init
# 例)
docker run -d --privileged --name hoge centos /sbin/init
docker exec -it hoge /bin/bash
/sbin/init
で特権モードで起動させてから接続するようにします。
(参考) CentOS7のコンテナでsystemctlを使うための方法
(参考) DockerでCentOS7起動時にsystemctlが動かないとき
docker-composeの場合
こちらも書く場所が違うだけで、やることは同じです。
privileged: true
command: /sbin/init
docker-compose.yml
services:
app:
build:
context: ./
privileged: true
command: /sbin/init
docker-compose up -d
docker-compose exec app /bin/bash