LoginSignup
104
67

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-12-10

概要

dockerからCnetOS7のコンテナを起動し、 systemctl コマンドからサービスを制御しようとしたところ以下のエラーに遭遇しました。

# systemctl
Failed to get D-Bus connection: Operation not permitted

ここでは上記のエラーを解消するための方法について記載します。

はじめに

そもそもこの D-Bus とは何か。

D-Bus (Desktop Bus) はメッセージバスと呼ばれる、アプリケーション間でやりとりを行うための、プロセス間通信(IPC)実装のひとつ。加えて、プロセスの生成期間を調節し、それらのサービスが必要なときに簡単に呼び出すことが出来るようにするものである。軽量さ、低依存度を保って開発されている。

Wikipedia からの引用となりますが、 D-Bus はプロセス間通信の実装を表しているようです。
はじめて目にしましたが、要は何らかの原因でプロセス間通信の制御が許可されていないようです。

エラー解消までに試したこと

1. CentOS7イメージのpull

まずはCentOS7のイメージを pull してきてコンテナを起動できるようにします。

# docker pull centos:7

2. コンテナの起動 (失敗)

CentOS7のイメージをベースにコンテナを起動してみます。
まずは何も考えずにそのまま run します。

# docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
centos                     7                   1e1148e4cc2c        4 days ago          202MB

# docker run -it 1e1 /bin/bash

3. systemctlコマンドの実行 (失敗)

systemctl コマンドを実行したところ、例のエラーメッセージが表示されました。

# systemctl
Failed to get D-Bus connection: Operation not permitted

4. コンテナ起動時に --privileged オプションを利用 (失敗)

先ほどのコンテナは exit で終了し、改めてコンテナ起動時に --privileged オプションを付けて試してみます。

# docker run -it --privileged 1e1 /bin/bash
# systemctl
Failed to get D-Bus connection: Operation not permitted

結果、エラーメッセージは表示されてしまいます。

5. コンテナをdetach起動して/sbin/initを実行 (成功)

どうやら systemctl コマンドを使うためにはコンテナを detach したうえで /sbin/init を実行する必要があるようです。
detch したコンテナにはあとから exec でattachするようにします。

# docker run -d --privileged 1e1 /sbin/init
8badab2733bd54d514f597dcad8e642851a144da5cc62f6686d329aae34309b8

# docker exec -it 8ba /bin/bash
# systemctl
  UNIT                                   LOAD   ACTIVE     SUB       DESCRIPTION
  dev-sda1.device                        loaded activating tentative /dev/sda1
  -.mount                                loaded active     mounted   /
  dev-hugepages.mount                    loaded active     mounted   Huge Pages File System
  ...(略)...

無事にCentOS7のコンテナで systemctl が使えるようになりました。

104
67
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
104
67