LoginSignup
0
0

More than 1 year has passed since last update.

DockerはSysFsを自動的に読み取り専用でマウントするらしい

Last updated at Posted at 2021-09-15

背景

おうちDockerSwarmクラスタを立てようとしていたところ不思議に思ったことが出たので調べてみました。仕様書を見たというものではないですが、そういう挙動をするようだ、というメモです。(更に詳しい仕様をご存知の方は教えてくれると助かります)
注: 7/31から2ヶ月寝かせたままだった記事です、詳細はもう覚えていません...

疑問に思ったこと

ここに、RPi-Exporterという、ホスト側の温度を取得してPrometheusのメトリクスExporterがあります。

これを Dockerコンテナ化したものに、 Docker-ARM-Exporterというものがあります。

そしてこの DockerArmExporterの実行例を見てみると、タイムゾーン、現在時刻、ノード名を読み取るだけで、肝心の 温度情報部分?をバインドしていませんでした。
image.png

このコンテナ、とりあえず試すだけなら、バインドしなくとも動く気がしたので、何もバインドせずに動かしてみました。
image.png

rpi_cpu_temperature_celsiusの項目が、リロードすると変動することからホスト温度が確かに読み取りできているようです。 何もバインドしなくて読み取れるってなんでだ?? これが今回の疑問点です。

どうやってホストの温度を読み出している?

そこでソースコードを見たところ、ioutil.ReadFile("/sys/class/thermal/thermal_zone0/temp") との1文があり、これを読み出すことで温度が取得できているようでした。

Debian/Stretchコンテナで検証

なにか特殊な細工がされているわけではないことを確認するため、debian:stretchコンテナを起動して読み取れるか確認してみました。
image.png
これでも読み取りできました。デフォルトでマウントされている、ということで間違いなさそうです。

他に湧いた疑問

デフォルトでマウントされているので温度を読み取れるというのはわかった、けど他にも気になることがある。

そもそも/sys/classって何?

/sys/classはデバイスへのシンボリックリンクが配置されるディレクトリとなっているようです。
https://www.wdic.org/w/TECH//sys/class

他には何がマウントされてるの?

他にも色々マウントされてるみたいです。
https://qiita.com/sato4557/items/b15f325bd735eb340da5

これって書き込めるの?

読み取り専用としてマウントされるようです。
https://forums.docker.com/t/unable-to-mount-sys-inside-the-container-with-rw-access-in-unprivileged-mode/97043
実際試しても書き込めませんでした。

セキュリティとかどうなの?

少しリスクはあるかもしれません
https://container-security.dev/security/sensitive-file-mount.html

結論

Dockerコンテナは何もボリュームをマウントしていなくてもシステムの一部が読み取れる状態で稼働している。書き込みはできないが、なにか攻撃のヒントが出てくる可能性も無くもないので用心に越したことはない。

0
0
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
0
0