gpt4 book ai didi

macos - 如何确定 Docker 容器(在 M1 MacBook 上)何时通过 qemu 运行?

转载 作者:行者123 更新时间:2023-12-03 17:17:47 30 4
gpt4 key购买 nike

已经mentioned当在 M1 Mac 上使用 x86_64 Docker 镜像时,当没有可用的 ARM64 镜像时,该容器将在 qemu 下启动仿真兼容性。 (以性能为代价。)
很多时候,当我运行一系列容器(以及针对该批次的集成测试)时,我会看到 qemu-system-aarch64钉几个核心。
我的问题:对于给定的运行容器列表(即 docker ps ),我如何确定哪些是本地运行的,哪些是被模拟的?

最佳答案

对于运行在 amd64 上的 Docker 也是如此。 CPU,当为 arm64 构建镜像时,整个机制是explained in this SO
仿真机制是使用 elf 中的信息。识别构建进程的体系结构,如果二进制的体系结构与 CPU 的体系结构不同,则启动 qemu仿真。虽然架构的识别更多地与过程相关,但仍然有关于 docker 镜像的目标架构的信息。目标架构由镜像上的“架构”标志确定,该标志是在构建镜像时设置的。将运行镜像的任何容器都将与此标志相关联(通过镜像)。
应该注意的是,镜像上的“架构”标志不会阻止镜像内的单个进程,该进程是为与要运行的标记的架构不同的架构编译的。这样做的原因是bitfmt (这是位于 linux 内核内部的底层机制)将始终尝试从 magic 中识别架构。 elf 的号码如果 magic 将启动仿真号码被识别。
要列出容器的架构,您可以使用以下“快速”查询:

for i in `docker ps --format "{{.Image}}"` ; do docker image inspect $i --format "$i -> {{.Architecture}} : {{.Os}}" ;done
该命令将打印镜像的容器名称、架构和操作系统。
为避免多次输入此命令,您可以在 .bashrc 中添加别名。如下:
alias docker-arch-ps='for i in `docker ps --format "{{.Image}}"` ; do docker image inspect $i --format "$i -> {{.Architecture}} : {{.Os}}" ;done';
在此之后,您可以使用简单的 docker-arch-ps获取容器列表及其架构。

关于macos - 如何确定 Docker 容器(在 M1 MacBook 上)何时通过 qemu 运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66834864/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com