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