Docker上のCentOS7コンテナでsystemctlを使用した際に以下のエラーが発生した場合の対処法です。Failed to get D-Bus connection: Operation not permitted
CentOS7コンテナは以下で構築したものを使用します。
設定値
privileged
コンテナに対して特権モードを付与します。これにより通常のコンテナではアクセスできないホストコンピュータへのアクセスが可能となります。
特権モードが付与されたコンテナではコンテナ内から直接Docker deamonを実行したり、ホストに接続されているハードウェアにアクセスすることも可能です。
コンテナを作成する際に--privileged
をオプション指定してください。
/sbin/init
systemctlを使用するためには/sbin/initを読み込む必要があります。
コンテナを作成する際に/sbin/initを指定してください。
コンテナの作成
docker runの場合
# --privilegedと/sbin/initを指定する
$ docker run -itd --privileged -p 2222:22 --name centos7-base centos7/base:1 /sbin/init
docker-composeの場合
services:
app:
image: centos7/base:1
privileged: true
command: /sbin/init
以上でCentOS7でsystemctlが使えるようになったと思います。
30代のWEB系企業エンジニアです。毎回同じようなことを検索してしまうので、自分の備忘録的に書いています。サイトのデザインはQiita(https://qiita.com)さんに寄せています。