Works by

Ren's blog

@rennnosuke_rk 技術ブログです

CentOS7 dockerコンテナのsystemctlを使用可能にする

TL;DR

  • CentOS7docker コンテナで systemctl が使えない
  • コンテナ起動時、--privileged /sbin/init を指定する
$ docker run -it --privileged --name centos -d centos:centos7 /sbin/init
$ docker exec -it centos /bin/bash

概要

CentOS 7 の Docker イメージは、下記コマンドにて習得できる。

$ docker pull centos:centos7

コンテナを作成してシェルを実行すると、CentOS をホスト OS であるかのようにコマンドを使用できる。

$ docker run -it -d --name centos centos:centos7
$ docker exec -it centos /bin/bash

ただし、CentOS のサービス制御コマンド systemctl を実行すると、以下のような表示が出て使用することができない。

$ Failed to get D-Bus connection: Operation not permitted

解決法

この問題を解消するためには、コンテナ起動時に --privileged オプションを指定した上で、 /sbin/init を起動する。

$ docker run -it --privileged --name centos -d centos:centos7 /sbin/init
$ docker exec -it centos /bin/bash

参考文献

F.2.4. /SBIN/INIT プログラム

Docker privileged オプションについて

CentOS7 のコンテナで systemctl を使うための方法