伝播が有効なバインドマウント

マウントの伝播は、方向と入れ子のマウントへの影響が必要な場合だけ許可してください。

説明

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 を検討してください。ファイルへのアクセス権は別途制限が必要です。

参考資料