我有一台运行 Mac OS X 的计算机。我有多个用户(假设为用户 1 和用户 2)
我已经为 Mac 安装了 docker 桌面。
有一点奇怪:我可以同时为 2 个用户运行 Docker Desktop。似乎为每个用户启动了 docker 守护进程。
每个用户都可以创建自己的容器。所有内容都由每个用户控制。这很棒。
但有一点我不明白:docker-cli 如何知道哪个是好的套接字文件?
这是我在 user1 会话中看到的内容:
(user1) $ ls -l /var/run/docker.sock
/var/run/docker.sock -> /Users/user1/.docker/run/docker.sock
这是我同时在 user2 会话中看到的内容:
(user2) $ ls -l /var/run/docker.sock
/var/run/docker.sock -> /Users/user2/.docker/run/docker.sock
同一台计算机上的同一目录上的同一符号链接指向不同的文件!这怎么可能呢?
谢谢
答案1
这确实很有趣,除了我习惯用它们做的事情之外,我不知道 unix 域套接字在底层是如何工作的,但从我所收集到的信息来看,一些 问题 上调 关于 它,通过阅读最后一个链接,据说它已在 1.11.2-beta12 版本中修复,但我仍然不确定修复的范围从哪里开始。
因此,需要进行更多的挖掘,从我目前了解到的情况来看,Darwin 内核直到 2017 年 6 月才具备实现符合 POSIX 标准的 Unix 域套接字的能力,发布 套接字变量在 Unix 域套接字上实现身份验证。
我仍然无法解释同一个套接字如何符号链接到文件系统中的另一个文件,指向用户的 $DOCKER_HOME。但我怀疑它是 2017 年实现的同一套功能的一部分。
对 OSX Darwin Kernel 发行说明有更多了解的人可能会对这个主题提供更多的见解,但我的侦探工作只能让我走这么远。
谢谢你的问题,它让我进入了一个令人难以置信的兔子洞。