DockerコンテナのCentOS7上でsystemctlを使う

概要

Docker で CentOS7 のコンテナを作成します。
そのコンテナ上で、systemctl を使うと以下のようなエラーが出ます。

 Failed to get D-Bus connection: Operation not permitted

この問題の回避策を紹介します。

privilegedオプション

docker run 時に –privileged を指定すると、上記の Operation not permitted が解消されます。
Docker Compose 的には、下記のように指定します。

 privileged: true

しかし、privileged は名前からすると特権モード的なものだと思うので、少々セキュリティ的に気持ち悪いですね。。。

privilegedオプションを使わない

上記のように privileged は使用を推奨されてない風に見えます。
privileged を使わない場合には、–cap-add sys_admin と –security-opt seccomp:unconfined を指定することで問題が解消できるようです。
Docker Compose 的には、下記のように指定します。

    cap_add:
      - SYS_ADMIN
    security_opt:
      - seccomp:unconfined

ちなみに、 https://qiita.com/shusugmt/items/92ece6874ba5aeff2b41 に古い情報ながら詳しい情報があります。
これによると、必ずしも双方を指定する必要は無いようなのですが、自分はきちんと検証できていないので cap_add と security_opt の双方をおまじないのように指定しています(/_\*)

コメント

タイトルとURLをコピーしました