症状
ホスト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つのオプションに置き換えることで症状が改善しました。
同じような症状に悩む方の参考になればと思います。