我想了解安装的实际原因docker.sock
的docker-compose.yml
文件.是自动发现吗?
volumes: - /var/run/docker.sock:/var/run/docker.sock
Boynux.. 111
docker.sock
是Docker守护程序正在侦听的UNIX套接字.它是Docker API的主要入口点.它也可以是TCP套接字,但出于安全原因,默认情况下Docker默认使用UNIX套接字.
Docker cli客户端默认使用此套接字执行docker命令.您也可以覆盖这些设置.
可能有不同的原因可能需要在容器内安装Docker套接字.就像从另一个容器中启动新容器一样.或者用于自动服务发现和日志记录.这会增加攻击面,所以如果你在一个容器内安装docker socket,你应该小心,在该容器内运行可信代码,否则你可以简单地破坏运行docker守护进程的主机,因为Docker默认以root身份启动所有容器.
Docker套接字在大多数安装中都有一个docker组,因此该组中的用户可以在没有root权限的情况下对docker socket运行docker命令,但实际的docker容器仍然获得root权限,因为docker守护进程有效地以root身份运行(它需要root权限才能访问命名空间和cgroups) .
我希望它能回答你的问题.
更多信息:https://docs.docker.com/engine/reference/commandline/dockerd/#examples
docker.sock
是Docker守护程序正在侦听的UNIX套接字.它是Docker API的主要入口点.它也可以是TCP套接字,但出于安全原因,默认情况下Docker默认使用UNIX套接字.
Docker cli客户端默认使用此套接字执行docker命令.您也可以覆盖这些设置.
可能有不同的原因可能需要在容器内安装Docker套接字.就像从另一个容器中启动新容器一样.或者用于自动服务发现和日志记录.这会增加攻击面,所以如果你在一个容器内安装docker socket,你应该小心,在该容器内运行可信代码,否则你可以简单地破坏运行docker守护进程的主机,因为Docker默认以root身份启动所有容器.
Docker套接字在大多数安装中都有一个docker组,因此该组中的用户可以在没有root权限的情况下对docker socket运行docker命令,但实际的docker容器仍然获得root权限,因为docker守护进程有效地以root身份运行(它需要root权限才能访问命名空间和cgroups) .
我希望它能回答你的问题.
更多信息:https://docs.docker.com/engine/reference/commandline/dockerd/#examples
我知道有点晚了,但我希望我的回答会给我这么多见解
让我先谈谈 Unix套接字
术语“套接字”通常是指IP套接字。这些是绑定到端口(和地址)的端口,我们向其发送TCP请求并从中获取响应。
套接字的另一种类型是Unix套接字,这些套接字用于IPC(进程间通信)。它们也称为Unix域套接字(UDS)。Unix套接字使用本地文件系统进行通信,而IP套接字使用网络。
泊坞窗守护程序可以监听通过三种不同类型的Socket泊坞引擎API请求:unix, tcp, and fd
。
默认情况下,在/var/run/docker.sock中创建unix域套接字(或IPC套接字)
让我们来看一些实时示例:
Docker Server使用此套接字监听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 } ]
一些命令:
curl --unix-socket /var/run/docker.sock http:// localhost / images / json | q
curl --unix-socket /var/run/docker.sock http:// localhost / containers / json | q
curl -i -X POST --unix-socket /var/run/docker.sock“ http:// foo / images / a95fgf458dfd / tag?repo = redis&tag = foo ”
curl --no-buffer --unix-socket /var/run/docker.sock http:// localhost / events
您可以使用docker.sock做很多事情
看看这篇美丽的文章