Repolode
Tecnativa

Tecnativa/docker-socket-proxy

Dockerソケットの前段に置くセキュリティ重視のHAProxyプロキシ。環境変数でDocker APIの各セクションへのアクセスを許可・拒否できます。

スター
2,850
フォーク
211
未解決の Issue
57
最終コミット
2 か月前

これは何?

Docker Socket ProxyはサービスとDockerソケットの間に入り、許可するDocker APIリクエストをフィルタリングします。ソケットをコンテナにそのままマウントすると、実質的にホストのroot権限を与えることになりますが、イベントへの反応やコンテナの管理にソケットを必要とするサービスもあります。このプロキシを使えば、サービスが実際に必要とするAPIの範囲だけを公開できます。

このプロキシはAlpineベースのHAProxyイメージと、シンプルな設定ファイルで構成されています。APIの各セクションは環境変数で制御し、1でアクセスを許可、0で拒否します。拒否されたセクションへのリクエストにはHTTP 403を返します。Events、ping、versionはデフォルトで許可される一方、AUTHやSECRETSなどセキュリティ上重要なセクションと、POSTによる書き込み操作はデフォルトで拒否されます。

このイメージはTLSを提供していないため、公開せず、プライベートなDockerネットワーク上での実行を想定しています。balenaOSなどのシステム向けにSOCKET_PATHでソケットパスを設定でき、LOG_LEVELも指定できます。複数のDocker APIバージョンに対応しており、Docker HubとGitHub Container Registryでイメージが公開されています。

主な機能

  • 01セクションごとの環境変数でDocker APIへのアクセスを許可・拒否できます。
  • 02ブロックされたリクエストにはHTTP 403を返します。
  • 03POSTを無効にして、プロキシを読み取り専用にできます。
  • 04SOCKET_PATHでソケットパスを指定できます。
  • 05AlpineとHAProxyをベースに、シンプルな設定ファイルで構成されています。
  • 061.27から1.51までの複数のDocker APIバージョンに対応しています。

ユースケース

  • 監視コンテナやリバースプロキシコンテナに、コンテナイベントへの読み取り専用アクセスを付与する。
  • CIツールや自動化ツールがホスト上で特権操作を実行できないように制限する。
  • Traefikのようなサービスディスカバリーツールが必要とするDocker APIセクションだけを公開する。

クイックスタート

  1. 1

    Docker socket へのアクセスを許可して proxy コンテナを起動する

    docker container run -d --privileged --name dockerproxy -v /var/run/docker.sock:/var/run/docker.sock -p 127.0.0.1:2375:2375 tecnativa/docker-socket-proxy
  2. 2

    ローカルの Docker クライアントが proxy を使用するように設定する

    export DOCKER_HOST=tcp://localhost:2375
  3. 3

    docker version を実行して接続を確認する

    docker version

使う前に知っておきたいこと

  • README によると、Docker socket に接続するにはコンテナを --privileged で実行する必要があります。
  • このイメージは TLS に対応していないため、通信は平文の HTTP となり、制限されたネットワーク内に留める必要があります。
  • セキュリティ上重要な領域では、各 Docker API セクションへのアクセスはデフォルトで無効になっており、明示的に許可する必要があります。

収録されている特集

トピック

よくある質問

docker-socket-proxy とは?
Dockerソケットの前段に置くセキュリティ重視のHAProxyプロキシ。環境変数でDocker APIの各セクションへのアクセスを許可・拒否できます。 Docker Socket ProxyはサービスとDockerソケットの間に入り、許可するDocker APIリクエストをフィルタリングします。ソケットをコンテナにそのままマウントすると、実質的にホストのroot権限を与えることになりますが、イベントへの反応やコンテナの管理にソケットを必要とするサービスもあります。このプロキシを使えば、サービスが実際に必要とするAPIの範囲だけを公開できます。
docker-socket-proxy は無料で使えますか?ライセンスは?
docker-socket-proxy は Apache-2.0 ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
docker-socket-proxy は今もメンテナンスされていますか?
半年以内に更新あり。docker-socket-proxy の最終コミットは 2026年8月31日 です。
docker-socket-proxy は何に使えますか?
監視コンテナやリバースプロキシコンテナに、コンテナイベントへの読み取り専用アクセスを付与する。 CIツールや自動化ツールがホスト上で特権操作を実行できないように制限する。 Traefikのようなサービスディスカバリーツールが必要とするDocker APIセクションだけを公開する。
docker-socket-proxy のインストール方法は?
Docker socket へのアクセスを許可して proxy コンテナを起動する: docker container run -d --privileged --name dockerproxy -v /var/run/docker.sock:/var/run/docker.sock -p 127.0.0.1:2375:2375 tecnativa/docker-socket-proxy ローカルの Docker クライアントが proxy を使用するように設定する: export DOCKER_HOST=tcp://localhost:2375 docker version を実行して接続を確認する: docker version
docker-socket-proxy はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/Tecnativa/docker-socket-proxy

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト