docker中的Unix套接字vs TCP套接字

它是在Docker的文档中写的:

因此,在Docker 0.5.2中,REST API端点(由Docker CLI用来与Docker守护进程通信)发生了变化,现在使用UNIX套接字而不是127.0.0.1上绑定的TCP套接字(后者容易发生如果您碰巧在本地机器上直接运行Docker,则不需要跨站点请求伪造攻击)。 然后可以使用传统的UNIX权限检查来限制对控制套接字的访问。

我不明白Unix套接字和TCP套接字之间有什么区别。 特别是,这里描述的威胁是什么:

如果您碰巧在本地机器上直接运行Docker,则在虚拟机之外,后者容易出现跨站请求伪造攻击)

? 为什么在VM中运行非常重要。

当网站或networking应用程序欺骗你(或者因为一个错误导致的网页浏览器)进入目标(在本例中为127.0.0.1)时,发生跨站请求伪造攻击。 当您在自己的机器上运行容器时,Docker客户端和服务器之间的通信最好由Unix域套接字提供。 但是,如果您在多个主机的Swarm模式下运行,则需要正确设置Docker以通过TCP和TLS运行以进行安全性和身份validation。

在这种情况下,在虚拟机上运行Docker没有什么“重要的”。 只有在某些操作系统上,Docker(或Linux主机上的Windows映像的图像)不能在本地运行。 这是在Windows和MacOS X上运行Docker的唯一方法。