gpt4 book ai didi

docker - 关于 Golang 编译器的 docker 容器内的系统架构

转载 作者:IT王子 更新时间:2023-10-29 02:06:57 24 4
gpt4 key购买 nike

巧合的是,我今天发现在我的 MacBook Pro 2017 上使用两种不同架构交叉编译的两个二进制文件都在同一个 ubuntu:latest docker 容器中运行。这是发生的事情:

我首先编译了一个运行 env GOOS=linux GOARCH=amd64 go build 的 hello-world,我们称之为二进制 A。然后我编译了相同的运行 env GOOS= 的 hello-world 程序linux GOARCH=arm64 go build,我们称这个二进制文件为 B。

我检查了 A 和 B 的 md5sum 并确保它们是不同的二进制文件。我将这两个二进制文件复制到同一个以 ubuntu:latest 为基础运行的 docker 容器中,期望 B 在执行时失败。然而,他们都被完美地执行了。

同样,使用 env GOOS=linux GOARCH=ppc64 go build 编译的二进制文件不会在同一个 docker 容器中执行。有谁知道这是为什么吗?


作为引用,uname -sm 在我的 MacBook 上的输出为 Darwin x86_64。在运行 ubuntu:latest 的 docker 容器中 uname -sm 的输出为 Linux x86_64

最佳答案

看起来此功能早在 1.13 中就已添加,但 docker 本周宣布的开发人员还需要做很多工作来实现无缝连接。来自Docker for Mac release notes :

Support for arm, aarch64, ppc64le architectures using qemu

在这种情况下发生的是 binfmt_misc qemu 用于允许从其他体系结构执行程序。这需要对主机进行更改,这就是为什么在 Linux 中尝试为其他体系结构运行命令时经常会出错的原因。

关于docker - 关于 Golang 编译器的 docker 容器内的系统架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55961931/

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