説明
Linux のバインド伝播設定は、新しいサブマウントがホストとコンテナー間で見える範囲を決めます。shared と rshared は双方向に伝播します。slave と rslave はホスト側のマウント変更を受け取りますが、逆方向には送りません。接頭辞の r は入れ子のマウントにも適用します。
不要な伝播はデータの公開範囲や運用上の依存関係を増やす場合があります。伝播の遮断は、既に共有したファイルの読み書きを禁止することとは異なります。
想定される影響
- 新しくマウントしたデータが意図しないコンテナーから見える場合があります。
- 双方向の伝播とマウント変更権限があると、コンテナーの変更がホストや他のマウントへ影響する可能性があります。
対処方法
- 伝播が不要なら既定の
rprivateを維持するか、目的に合う非共有設定を使ってください。 - 必要な場合は伝播方向、入れ子のマウント、実際の共有相手を確認し、マウント変更権限を最小限にしてください。
- 変更後も必要なデータにアクセスできることをテストしてください。マウント伝播は Linux ホストの機能であり、Docker Desktop ではサポートされません。
例
実際のイメージと ENVVAR が示すホストパスを用意してください。伝播はホストの元のマウント設定にも依存します。
変更前
yaml
version: "3.2"
services:
app:
image: notreal
volumes:
- type: bind
source: $ENVVAR/.whew/path/datapath
target: /data
bind:
propagation: rshared
rshared は入れ子のマウント変更も双方向に伝播できます。
変更後
yaml
version: "3.2"
services:
app:
image: notreal
volumes:
- type: bind
source: $ENVVAR/.whew/path/datapath
target: /data
bind:
propagation: private
private はこのマウントの伝播を遮断します。入れ子のマウントにも再帰的に適用する場合は、既定の rprivate を検討してください。ファイルへのアクセス権は別途制限が必要です。