它說
Docker daemon creates a non-networked Unix domain socket at /var/run/docker.sock
非聯網Unix域套接字表示什麼?
答案1
這是一個位址為a的套接字檔案系統路徑而不是某種形式的網路位址。例如,127.0.0.1:4567
程式將「連接」到特殊文件,而不是連接到 IP 位址:連接埠(例如 ) /var/run/docker.sock
。
(然而,IP 和 Unix 套接字之間的實際 API 幾乎相同 - 程式對這兩種類型使用相同的 socket()、bind()、connect() 呼叫。它們只需要指定AF_UNIX
(或AF_LOCAL),而不是通常AF_INET[6]
的事實上,這使得它們成為內部通訊的常見選擇。最多Linux 系統上的程式以這種方式進行通訊。
它是「非網路化」的,因為套接字只能由本地運行的進程存取。 (您無法透過 NFS 或 SSHFS 使用它。)與可以綁定到 localhost 的「IP 網域」套接字不同或者任何位址(例如在連結的文章中討論連接埠 2375 上的外部可存取 IP 套接字),「Unix 網域」套接字保證僅是本地的。
(此外,Unix套接字可以使用檔案權限來限制對套接字的存取權——例如僅限「docker」群組的成員——並且守護程式知道每個連接客戶端的UID。最後,當然,套接字有一個適當的姓名所以你不會有兩個不同的程式爭奪同一個連接埠...)
「域」一詞與互聯網的“域名系統”無關,僅用於一般意義上的“領域”或“區域”——據我所知,“Unix 域”只是簡單地表示“本地運行的作業系統” (而不是「所有連接到網路的機器」),因為有這種機制作為套接字 API 的一部分確實最初是 Unix 的特性。更好的名稱是“本地套接字”,即 AF_LOCAL,但這並不適用。
Windows 有一個非常相似的功能,稱為“命名管道”,例如\\.\pipe\docker_engine
. Windows 命名管道確實比Unix 管道更像Unix 套接字- 然而,與使用套接字相比,程式仍然需要使用完全不同的API 在Windows 上使用命名管道(儘管Win10 也有AF_UNIX 套接字),並且仍然可以存取通過 SMB 的不安全管道。
答案2
根據上下文,這意味著 docker 無法從主機外部(即本地和外部網路)訪問,但是“只有具有root權限或Docker群組成員身份的進程[在同一台機器上]才能存取”