我第一次尝试在Ubuntu16.04.4LTS中构建NodeMCU Docker。我已经阅读了这里为Docker和NodeMCU标记的文章,但没有看到这个特定的错误。
"docker run hello-world“没有问题。
我已经尝试了两种形式的NodeMCU构建命令:
$ docker run --rm -ti -v `pwd`:/opt/nodemcu-firmware marcelstoer/nodemcu-build和显式的路径变化:
$ docker run --rm -it -v /home/tim/nodemcu-firmware:/opt/nodemcu-firmware marcelstoer/nodemcu-build在这两种情况下,我都会得到这样的错误:
standard_init_linux.go:187: exec user process caused "exec format error"我已经在这个错误上进行了搜索,并通过most solutions are related找到了一个丢失的页面。
然而,我不确定哪个脚本需要shebang,或者为什么它在我的情况下不起作用,但在其他情况下是正确的。
还有没有人遇到过这个错误?
发布于 2018-07-04 08:31:20
如果没有深入的技术细节,这个错误意味着内核不能识别可执行文件的格式,因此,它不能运行这个文件。在本例中,此错误与启动容器时启动的可执行文件有关。根据docker inspect marcelstoer/nodemcu-build输出中的Cmd条目,它是一个文件/bin/sh,这是一个ELF可执行文件。
当Linux不能执行ELF二进制文件并返回这样的错误(关于文件格式)时,通常与系统架构有关。更具体地说,镜像marcelstoer/nodemcu-build包含ELF64可执行文件(即用于amd64体系结构),而您的系统不支持它(它是i386还是arm的某种风格?)。然而,运行docker run hello-world对你来说很好,因为Docker支持的所有架构都有hello-world镜像。
根据marcelstoer/nodemcu-build镜像的Dockerfile,它是由不同架构的ubuntu构建的,因此,您可以尝试在您的系统上构建marcelstoer/nodemcu-build镜像,而不是从dockerhub拉取它。
附言:关于你链接到你的问题的解决方案。这不是关于你的案例(ELF二进制),而是关于一个脚本。对于脚本,可执行格式由文件开头的换行(#!)识别,因此,脚本必须以#!开头,而不是以换行符开头。这就是为什么作者得到了同样的错误:内核无法检测到这是一个脚本,因此无法启动它。不同(但相似)的原因,相同的错误。
https://stackoverflow.com/questions/51163044
复制相似问题