Docker daemon 绑定到 Unix socket, 而不是 TCP Port

8 min read

当 Docker daemon 绑定到 Unix socket 时,它与宿主机上的 Docker 客户端通信,而不是通过 TCP 端口。

这允许宿主机上的 Docker 客户端与 Docker daemon 之间的通信更安全,因为 Unix socket 只能被宿主机上的应用程序访问,而不能通过网络访问。

要将 Docker daemon 绑定到 Unix socket,可以在 /etc/docker/daemon.json 文件中配置以下内容:

{
    "hosts": ["unix:///var/run/docker.sock"]
}

然后重新启动 Docker daemon 使配置生效。

Unix socket 是什么

Unix socket 是一种用于进程间通信(IPC)的套接字,它只能在同一台机器上的进程之间使用。它与通过网络进行通信的套接字(如 TCP 套接字)不同,因为它不需要 IP 地址和端口号。

在 Unix 操作系统中,进程间通信通常通过文件系统来实现。当一个进程想要与另一个进程通信时,它会创建一个名为 Unix socket 的特殊文件,另一个进程可以打开这个文件并与该进程通信。这些文件通常存储在 /var/run/tmp 目录中。

Unix socket 与 TCP 套接字有以下几点不同:

  • Unix socket 只能在同一台机器上的进程之间使用,而 TCP 套接字可以在不同机器之间使用。
  • Unix socket 不需要 IP 地址和端口号,而 TCP 套接字需要。
  • Unix socket 通常比 TCP 套接字的速度更快,因为它不需要经过网络层。

由于 Unix socket 只能在同一台机器上使用,因此它通常用于在宿主机上的应用程序与容器之间进行通信。例如,Docker daemon 通常会通过 Unix socket 与宿主机上的 Docker 客户端通信。

套接字 socket 是什么

套接字(socket)是一种抽象的概念,用于描述进程间通信(IPC)的一组接口。它允许进程在同一台机器上或不同机器上进行通信。

套接字提供了一种标准的、可移植的方法来进行 IPC,因此不同类型的应用程序可以互相通信。例如,一个 Web 服务器可以使用套接字与客户端进行通信,并为客户端提供服务。

不同类型的套接字通常使用不同的协议,这些协议用于定义如何在两个进程之间进行通信。常见的协议包括 TCP(传输控制协议)和 UDP(用户数据报协议)。

在操作系统层面,套接字通常作为一种特殊的文件类型存在。应用程序可以打开、读取和写入这些文件以进行通信。例如,当一个进程想要与另一个进程通信时,它可以打开对方进程的套接字文件,并向其发送数据。