文件“ docker.sock”的目的是什么?

问题描述 投票:0回答:3
docker.sock

的实际原因。 是为了自动发现吗?

docker-compose.yml
	
Docker守护程序正在听的Unix插座。这是Docker API的主要切入点。它也可以是TCP套接字,但由于安全原因,默认情况下Docker默认使用Unix套接字。 docker CLI客户端使用此套接字默认执行Docker命令。您也可以覆盖这些设置。

可能需要将Docker插座安装在容器中的不同原因。就像从另一个容器内启动新容器一样。或用于自动服务发现和记录目的。这会增加攻击表面,因此,如果将Docker插座安装在容器中,则应该小心。在该容器内部有可信赖的代码,否则您可以简单地损害正在运行Docker Daemon的主机,因为Docker默认情况下将所有容器都启动为root。 docker插座在大多数安装中都有一个docker组) 我希望它回答您的问题。
MoreInfo:
Https://docs.docker.com/engine/reference/commandline/dockerd/#examples
docker docker-compose
3个回答
232
投票

我知道这一点很晚,但我希望我的回答能够提供很多见解

我第一次谈论

unix插座

术语术语通常是指IP插座。这些是绑定到端口(和地址)的,我们将TCP请求发送到并从中获得答复。 其他类型的套接字是Unix套接字,这些插座用于

IPC

(概要通信)。它们也被称为Unix域插座(

UDS)。 UNIX插座使用本地文件系统进行通信,而IP套接字使用网络。 Docker守护程序可以通过三种不同类型的插座收听Docker Engine API请求:

volumes: - /var/run/docker.sock:/var/run/docker.sock

158
投票
创建一个UNIX域插座(或IPC套接字)

我们看到一些现场示例

Docker Server使用此套接字来收听REST API,客户使用套接字将API请求发送到服务器。 Curl可以通过

docker.sock
标志与Unix插座交谈。由于Docker Server API被暴露为REST,因此我们需要发送命令 http。另外,由于该服务器是本地的(请记住,文件系统),我们 可以传递URL中的任何主机名(或坚持到Local主机, 工作也很好!)。服务器不在乎主机名,只是 路径

unix, tcp, and fd

--unix-socket

有些命令


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 | jq

curl --unix-socket /var/run/docker.sock http://localhost/containers/json | jq

你可以用docker.sock
做很多事情
检查这个美丽的

    当您在计算机中安装Docker时。两个不同的程序进来:
  • docker客户端
    docker服务器
  • DockerServer在网络上(通过网络或“文件”)恢复命令。 docker客户端通过网络通信,并将消息发送到Docker Server说制作容器,启动容器,停止容器等。
    当客户端和服务器在同一台计算机上运行时,它们可以通过称为套接字的特殊文件连接。而且由于它们可以通过文件进行通信,并且Docker可以在主机和容器之间有效共享文件,这意味着您可以在Docker本身内运行客户端。
    
    这里是一个样本:
  • curl -i -X POST --unix-socket /var/run/docker.sock "http://foo/images/a95fgf458dfd/tag?repo=redis&tag=foo"
    该命令创建一个docker客户端安装的容器。并检查卷部分:
  • curl --no-buffer --unix-socket /var/run/docker.sock http://localhost/events
  • 带有标志IT共享主机
  • docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock docker sh
文件,因此您可以通过容器来操纵主机内的容器。
-v /var/run/docker.sock:/var/run/docker.sock

在主机终端上的run。
-v

基本上将主机码头守护程序暴露于容器中。因此,您可以从容器中调用Docker API/客户端,以开始/停止/构建图像/容器,例如直接调用主机上的这些命令。

29
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.