如何验证 Docker Buildx 构建实际使用给定平台的本机节点?
我在 x64 Linux 上有一个名为
maven
的基于 QEMU 的多平台 Buildx 构建器。为此,我附加了一个 Mac Mini 作为 Arm 构建的本机节点。
$ docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS
builder docker-container
builder0 unix:///var/run/docker.sock inactive
maven * docker-container
maven0 unix:///var/run/docker.sock running v0.11.0 linux/amd64*, linux/amd64/v2, linux/arm64, ....
mac-mini ssh://[email protected] running v0.11.5 linux/arm64*, linux/amd64, linux/amd64/v2, ...
此外,我通过构建“Hello World”图像验证了设置是否确实有效。
$ docker buildx build --progress plain --builder maven --platform linux/arm64,linux/amd64 --tag my-hello-world .
...
#8 [linux/arm64 internal] load metadata for docker.io/library/debian:bullseye-slim
#8 DONE 1.0s
#6 [linux/amd64 internal] load metadata for docker.io/library/debian:bullseye-slim
#6 DONE 0.9s
...
问题是:Docker 实际上是使用本地节点进行 Arm 构建还是可能仍然是本地 QEMU“节点”?输出没有说。
docker-container
在每个节点上创建一个moby/buildkit
容器。容器的名称是buildx_buildkit_<node-name>
。您可以四处查看该容器以了解它在做什么。
因此,无论是在“本地”主机上还是在远程 Mac Mini 上都可以
$ docker ps
验证容器名称是什么,例如buildx_buildkit_mac-mini
就我而言$ docker exec -ti buildx_buildkit_mac-mini sh
获取控制台访问正在运行的容器$ top
在容器内监控进程在这些容器中,PID 1 始终为
buildkitd
。如果您启动 Buildx 构建并且 Docker 将工作分配给此节点,则将启动其他进程。下面的例子。