如何安装
AI生成
1. 访问 [Docker官网](https://www.docker.com/products/docker-desktop) 下载适用于macOS的Docker Desktop安装包。
2. 双击下载的 `.dmg` 文件,将Docker图标拖到 `Applications` 文件夹中。
3. 打开 `Applications` 文件夹,双击 `Docker` 图标启动Docker Desktop。
4. 安装完成后,Docker Desktop会自动启动,并在菜单栏中显示Docker图标。
技术架构
https://www.jianshu.com/p/5cbbe932e0e2?v=1741598928938
如何访问宿主机
Docker Desktop 未提供直接远程访问容器虚拟主机的入口。我们可以使用nsenter方法连接访问,主要思路是我们在MacOS Terminal使用docker CLI起来一个容器,然后在容器内部运行nsenter进入容器主机命名空间。具体命令如下:
docker run --rm -it --privileged --pid=host alpine nsenter -t 1 -m -u -i -n sh
逐个参数解析
1.docker run
运行一个新的 Docker 容器。
2.--rm
容器退出后自动删除,避免占用资源。
3.-it
-i(interactive):保持容器的标准输入(stdin)打开,允许交互式操作。
-t(tty):分配一个伪终端,使 shell 交互体验更友好。
4.--privileged
让容器拥有更高的权限,包括访问宿主机的设备、内核功能等。
由于 Docker Desktop 运行在 macOS 上,它内部实际是一个 LinuxKit 虚拟机,而--privileged允许容器访问这个虚拟机的资源。
5.--pid=host
让容器共享宿主机的进程 ID (PID) 命名空间。
这里的宿主机其实是Docker Desktop 内部的 LinuxKit 虚拟机,而不是 macOS 本身。
这样,容器就能访问到 LinuxKit 虚拟机的进程。
6.alpine
这是要运行的镜像,这里选择Alpine Linux,因为它体积小、启动快,适合做调试。
7.nsenter -t 1 -m -u -i -n sh
nsenter:进入另一个进程的命名空间(namespace)。
-t 1:指定要进入的目标进程PID 1(即 LinuxKit 虚拟机的 init 进程)。
-m(mount):进入它的挂载(mount)命名空间,可以访问它的文件系统。
-u(UTS):进入主机名和域名(UTS)命名空间,查看虚拟机的主机名。
-i(IPC):进入进程间通信(IPC)命名空间,可以访问共享内存、消息队列等。
-n(network):进入网络命名空间,可以查看和操作 LinuxKit 虚拟机的网络接口。
sh:在目标命名空间内启动一个 shell,让你可以交互式执行命令。
Docker CLI如何连接容器虚拟主机ContainerD?
使用UNIX socket: /var/run/Docker.sock连接,不使用TCP连接。
docker -H unix://var/run/docker.sock ps
curl --unix-socket /var/run/docker.sock http://localhost/containers/json