docker buildx“;exec用户进程导致:exec格式错误;

docker buildx“;exec用户进程导致:exec格式错误;,docker,rust,buildx,Docker,Rust,Buildx,我正在尝试交叉编译一个rust应用程序,以便在我的raspberry pi集群上运行。我看到docker的buildx应该能够实现这一点。我现在有一个最小dockerfile,如下所示: FROM rust RUN apt-get update ENTRYPOINT ["echo", "hello world"] 我试图通过运行命令来编译它:docker buildx build--platform=linux/arm/v7 some/repo:tag。

我正在尝试交叉编译一个rust应用程序,以便在我的raspberry pi集群上运行。我看到docker的buildx应该能够实现这一点。我现在有一个最小dockerfile,如下所示:

FROM rust
RUN apt-get update
ENTRYPOINT ["echo", "hello world"]
我试图通过运行命令来编译它:
docker buildx build--platform=linux/arm/v7 some/repo:tag。

当我这样做时,我得到以下错误:

[+] Building 0.9s (5/5) FINISHED                                      
=> [internal] load build definition from Dockerfile                                                                                                                                                  0.0s  => => transferring dockerfile: 102B                                                                                                                                                                  0.0s  => [internal] load .dockerignore                                                                                                                                                                     0.0s  => => transferring context: 2B                                                                                                                                                                       0.0s  => [internal] load metadata for docker.io/library/rust:latest                                                                                                                                        0.7s  => CACHED [1/2] FROM docker.io/library/rust@sha256:65e254fff15478af71d342706b1e73b26fd883f3432813c129665a97a74e2278
0.0s  => ERROR [2/2] RUN apt-get update                                                                                                                                                                   0.2s
------                                                                                                                                                                                                     
 > [2/2] RUN apt-get update:
#5 0.191 standard_init_linux.go:219: exec user process caused: exec format error
------ error: failed to solve: rpc error: code = Unknown desc = executor failed running [/bin/sh -c apt-get update]: exit code: 1
我觉得我错过了一些基本的东西,希望有人能告诉我为什么这么简单的事情对我不起作用

我在Ubuntu操作系统上运行docker版本20.10.1

提前谢谢


docker buildx inspect的输出——引导

Name:   default
Driver: docker

Nodes:
Name:      default
Endpoint:  default
Status:    running
Platforms: linux/amd64, linux/386

ls-l/proc/sys/fs/binfmt\u misc/
的输出:

total 0
--w------- 1 root root 0 Dec 19 07:29 register
-rw-r--r-- 1 root root 0 Dec 19 07:29 status

交叉编译需要
qemu用户静态
infmt支持

$sudo apt安装-y qemu用户静态binfmt支持
qemu用户静态
用于qemu的用户模式模拟,以及
binfmt_misc
用于在读取其他可执行二进制文件时切换到qemu。然后,告诉docker使用它们

$docker run--rm--privileged multiarch/qemu用户静态--reset-p yes
您必须害怕将未知映像作为特权运行,但是。接下来,在docker中创建用于构建图像的用户

$docker buildx create——命名为sofia#随意命名
$docker buildx使用索菲亚
$docker buildx inspect--引导
如果成功,
buildkit
将被拉入:

[+]9.4s楼(1/1)完工
=>[内部]启动构建工具包9.4s
=>=>拉取图像moby/buildkit:buildx-stable-1 8.7s
=>=>创建容器buildx\u buildkit\u sofia0 0.7s
姓名:索菲亚
司机:docker集装箱
节点:
姓名:索菲亚
终点:unix:///var/run/docker.sock
状态:正在运行
平台:linux/amd64、linux/arm64、linux/riscv64、linux/ppc64le、linux/s390x、linux/386、linux/arm/v7、linux/arm/v6
可用目标扩展

参考:

有一个输入错误:
apt get upodate
。应该是
apt get update
(在步骤2中),感谢您指出,错误仍然保持不变,没有输入错误,但是:(请显示docker buildx inspect--bootstrap和
ls-l/proc/sys/fs/binfmt_misc/
?我在Fedora 33上,我只需要
sudo dnf安装-y qemu user static
。谢谢!