Docker上のCentOS7コンテナでsystemctlを使えるようにする

プログラミング

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が使えるようになったと思います。

pocketcode

30代のWEB系企業エンジニアです。毎回同じようなことを検索してしまうので、自分の備忘録的に書いています。サイトのデザインはQiita(https://qiita.com)さんに寄せています。