生成Dockerfile时使用非零代码139执行 描述/再现步骤

生成Dockerfile时使用非零代码139执行 描述/再现步骤,docker,build,raspberry-pi,dockerfile,open62541,Docker,Build,Raspberry Pi,Dockerfile,Open62541,我试图在Raspberry Pi 1上的docker容器中运行opc ua server examle“server_ctt”(使用中的open62541库),但是 我无法创建docker图像 首先,我按照上面的说明克隆了回购协议。 之后,我尝试通过在open62541目录中执行以下命令来构建映像: docker构建-f docker/Dockerfile. 这是我在终端中得到的输出: pi@raspberrypi:~/ma/dockerVersion/open62541 $ docker bu

我试图在Raspberry Pi 1上的docker容器中运行opc ua server examle“server_ctt”(使用中的open62541库),但是 我无法创建docker图像

首先,我按照上面的说明克隆了回购协议。 之后,我尝试通过在open62541目录中执行以下命令来构建映像:
docker构建-f docker/Dockerfile.

这是我在终端中得到的输出:

pi@raspberrypi:~/ma/dockerVersion/open62541 $ docker build -f docker/Dockerfile                         .
Sending build context to Docker daemon  38.69MB
Step 1/18 : FROM alpine:3.10
3.10: Pulling from library/alpine
4e972d957a60: Pull complete
Digest: sha256:7c3773f7bcc969f03f8f653910001d99a9d324b4b9caa008846ad2c3089f5a5f
Status: Downloaded newer image for alpine:3.10
 ---> cf7ea1e5a972
Step 2/18 : RUN apk add --no-cache cmake gcc git g++ musl-dev mbedtls-dev python py-pip make && rm -rf /var/cache/apk/*
 ---> Running in 82c8b5868509
The command '/bin/sh -c apk add --no-cache cmake gcc git g++ musl-dev mbedtls-dev python py-pip make && rm -rf /var/cache/apk/*' returned a non-zero code: 139
在此之前,我已经使用便利脚本在我的raspberry pi上安装了docker

对如何解决这个问题有什么建议吗

背景资料 我通过油灰连接到我的树莓圆周率。但我想这没什么区别。 此外,在Windows上构建映像并运行server_ctt示例完全可以

编辑: 在windows pc上构建/运行open62541映像时,我尝试将其保存并复制到raspberry pi 1。我的raspberry pi上的docker load命令工作正常,运行以下错误的图像输出:

standard_init_linux.go:211: exec user process caused "exec format error"

这可能是由于不同的体系结构(raspberry pi 1使用ARM体系结构)。如何解决这个问题?

回答更新的问题:您可以使用

这将创建一些虚拟化的构建器,为所需的体系结构构建容器。因此,构建过程可能需要更长的时间(我认为对于我的项目来说,因子10是现实的)

对于您的案例来说,最重要的命令是

docker buildx build --platform linux/arm/v7 .

错误代码139通常表示内存不足。考虑到你想要在树莓皮上构建图像,这是很有可能发生的。您应该在更大的主机上构建映像,然后只在Raspberry PI上运行容器。@Mihai嘿!谢谢你的建议,这似乎是合理的。我尝试过的:我在我的windows pc上构建并保存了图像。然后我通过WinSCP将图像复制到我的raspberry pi 1,然后我加载了图像,效果很好。但是如果我现在尝试在我的raspberry pi上运行映像,我会得到以下错误:standard_init_linux.go:211:exec用户进程导致“exec格式错误”。原因可能是不同的架构(raspberry pi有一个ARM架构)。如何解决这个问题?请尝试在Linux环境中构建映像。你可以在windows下启动一台流浪者机器,并在你的映像中构建。@Mihai我曾尝试在ubuntu虚拟机中构建它,但我在那里也得到了相同的错误代码。有没有一种方法可以交叉编译raspberry pi(arm架构)的映像?没有。您需要找到一个支持arm的基础映像(示例:),并基于它重建映像。您使用的图像基于alpine:3.10。很可能你还需要调整其他一些东西,但这就是我的出发点。