回答:
docker.sock
DockerデーモンがリッスンしているUNIXソケットです。これは、Docker APIのメインエントリポイントです。TCPソケットにすることもできますが、デフォルトではセキュリティ上の理由から、DockerはデフォルトでUNIXソケットを使用します。
Docker CLIクライアントは、デフォルトでこのソケットを使用してDockerコマンドを実行します。これらの設定もオーバーライドできます。
コンテナー内にDockerソケットをマウントする必要がある理由はいくつかあります。別のコンテナー内から新しいコンテナーを起動するようなものです。または、自動サービス検出とロギングの目的で。これにより、攻撃対象が増えるため、Dockerソケットをコンテナー内にマウントする場合は注意してください。コンテナー内で信頼されたコードが実行されている場合、Dockerはデフォルトですべてのコンテナーをルートとして起動するため、Dockerデーモンを実行しているホストを危険にさらす可能性があります。
DockerソケットにはほとんどのインストールでDockerグループがあり、そのグループ内のユーザーはroot権限なしでdockerソケットに対してdockerコマンドを実行できますが、Dockerデーモンはrootとして効果的に実行されるため、実際のdockerコンテナーは引き続きroot権限を取得します(名前空間とcgroupにアクセスするにはroot権限が必要です) 。
それがあなたの質問に答えてくれるといいのですが。
詳細:https : //docs.docker.com/engine/reference/commandline/dockerd/#examples
/var/run/docker.sock
。コンテナ内では一般的な、まだ非常に危険な練習であるアンの攻撃者が任意のコマンドを実行できるドッキングウィンドウのサービスは、一般的にrootとしてドッカサービスの実行としての全体のホストシステムへのアクセスを提供し、実行することができます。 "
少し遅れていることはわかっていますが、私の回答で多くの洞察が得られることを願っています
最初にUnixソケットについて話しましょう
ソケットという用語は通常、IPソケットを指します。これらはポート(およびアドレス)にバインドされているものであり、TCP要求を送信し、そこから応答を取得します。
別のタイプのソケットはUnixソケットです。これらのソケットはIPC(プロセス間通信)に使用されます。それらは、Unix Domain Sockets(UDS)とも呼ばれます。Unixソケットは通信にローカルファイルシステムを使用し、IPソケットはネットワークを使用します。
Dockerデーモンは、3種類のソケットを介してDocker Engine APIリクエストをリッスンできますunix, tcp, and fd
。
デフォルトでは、UNIXドメインソケット(またはIPCソケット)は/var/run/docker.sockに作成されます。
いくつかのライブ例を見てみましょう:
Dockerサーバーはこのソケットを使用してREST APIをリッスンし、クライアントはソケットを使用してAPIリクエストをサーバーに送信します。
curlは、
--unix-socket
フラグを介してUnixソケットと通信できます。Docker Server APIはRESTとして公開されているため、HTTP経由でコマンドを送信する必要があります。また、このサーバーはローカル(ファイルシステムを思い出してください)であるため、URLで任意のホスト名を渡すことができます(またはlocalhostに固執することもできます!サーバーはホスト名を気にせず、パスのみを気にします。
curl --unix-socket /var/run/docker.sock http://localhost/images/json | jq
[
{
"Containers": -1,
"Created": 1525888860,
"Id": "sha256:24a77bfbb9ee3aeef9e24766ad6e9fa57f85c67596f154e8916e4f314067e149",
"Labels": null,
"ParentId": "",
"RepoDigests": [
"postgres@sha256:b06cdddba62f1550a1c674270814e72eaa8734d95912019b4ddc288b650ad67d"
],
"RepoTags": null,
"SharedSize": -1,
"Size": 39507096,
"VirtualSize": 39507096
}
]
いくつかのコマンド:
docker.sockで多くのことができます