LoginSignup
55
58

More than 3 years have passed since last update.

Dockerのprivilegedでハマった

Last updated at Posted at 2019-02-24

症状

ホストOS起動時のコンソールに現れるホスト名にコンテナのIDが表示される症状が現れました。

環境

DockerComposeの利用において以下の環境で症状が発生しました。
ホストOS:CentOS7
コンテナ:CentOS7
この条件においてコンテナ内でsystemdを使用したかったので、Googleで調べるとprivilegedを利用すれば良いということで、docker-compose.yamlに以下を追記しました。

privileged: true

調査

・Dockerが悪いのかを切り分けるために、Dockerのサービスを無効化して起動
 → 正常動作
  → Dockerで問題が発生したことが確定

・どのコンテナが悪いのが切り分けるために、1つずつコンテナを消して起動を繰り返す
 → privileged オプションを含むコンテナを起動させると症状が再発
  → さらに該当コンテナからprivilegedを削除して起動
   → 正常動作
  → privileged が原因と判明

対策

結論からいくとprivilegedをやめ、以下のオプションに置き換えることで症状が無くなりました。

    cap_add:
      - SYS_ADMIN
    security_opt:
      - seccomp:unconfined
    volumes:
      - /sys/fs/cgroup:/sys/fs/cgroup:ro

それぞれのオプションを簡単に説明します。

    cap_add:
      - SYS_ADMIN

コンテナの capabilities の追加を行います。※指定できる capabilities に関してはこちら
systemdを利用するためには「SYS_ADMIN」が必要のようです。

    security_opt:
      - seccomp:unconfined

これはDockerが行うシステムコールを制限するオプションで「unconfined」は無効化する事を意味しています。※詳しい情報はこちら

    volumes:
      - /sys/fs/cgroup:/sys/fs/cgroup:ro

これは、こちらの方の記事を参考にしました。
systemd in docker container without --privileged
ホストOSでsystemdが動いている時にこの設定が有効とのこと。

症状が起きた端末では「privileged」の代わりに、これらの3つのオプションに置き換えることで症状が改善しました。
同じような症状に悩む方の参考になればと思います。

55
58
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
55
58