コンテナーにマウントされた Docker ソケット

Docker ソケットのマウントは、コンテナープロセスにホストの Docker デーモンを制御する権限を与える場合があります。

説明

/var/run/docker.sock をマウントすると、ソケットへのアクセス権を持つプロセスがホストの Docker デーモンと直接通信できます。通常の root 権限で動くデーモンでは、コンテナーの作成やホストパスのマウントを通じてホストを制御できる場合があります。

ビルドや管理用途でも、信頼できる処理だけに許可してください。ソケットを読み取り専用でマウントしても、Docker API の変更操作を禁止することにはなりません。

想定される影響

  • Docker API を通じて他のコンテナーやホストファイルへアクセスできる可能性があります。
  • アプリケーションの侵害がデーモンの権限範囲まで広がる場合があります。

対処方法

  • 一般のアプリケーションコンテナーから /var/run/docker.sock のマウントを削除してください。
  • ビルドや管理処理は隔離した環境へ分離し、デーモンへのアクセスを信頼できる実行主体に限定してください。
  • ソケットの削除後に必要な処理が動くことを確認し、他の Docker API 接続経路も見直してください。

例

イメージ名は例です。実際のアプリケーションイメージを指定し、必要なポートだけを公開してください。

変更前

yaml
version: "3.1"

services:
  service1:
    container_name: service
    image: notareal/image:latest
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - 8080:8080

ソケットにアクセスできるプロセスがホストの Docker API を呼び出せます。

変更後

yaml
version: "3.1"

services:
  service1:
    container_name: service
    image: notareal/image:latest
    restart: always
    ports:
      - 8080:8080

このサービスからソケットのマウントを削除しています。他の権限とマウントも確認してください。

参考資料