Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

概要

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 が使えるようになりました。

Targityen
帳票パッケージプロダクトの開発・保守を行っています。 日々の業務の効率化の方法や技術情報をまとめていきたいと思います。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away