我第一次尝试在Ubuntu 16.04.4 LTS中构建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。
但是,我不确定哪个脚本需要使用shebang,或者为什么它在我的情况下不起作用,但可以针对其他脚本进行修正。
还有其他人遇到此错误吗?
答案 0 :(得分:0)
说到没有详尽的技术细节,此错误意味着内核无法识别可执行文件的格式,因此,它无法运行此文件。在您的情况下,此错误与启动容器时启动的可执行文件有关。根据{{1}}输出中的Cmd
条目,它是文件docker inspect marcelstoer/nodemcu-build
,它是ELF可执行文件。
当Linux无法执行ELF二进制文件并返回这样的错误(关于文件格式)时,通常与系统体系结构有关。更具体地说,映像/bin/sh
包含marcelstoer/nodemcu-build
个可执行文件(即ELF64
体系结构),而您的系统不支持它(是amd64
还是什至是{{ 1}}?)。但是,运行i386
对您来说很好用,因为arm
映像存在于Docker支持的所有体系结构中。
根据docker run hello-world
图像的Dockerfile,它是根据hello-world
构建的,marcelstoer/nodemcu-build
适用于不同的体系结构,因此,您可以尝试在自己的计算机上构建ubuntu
图像系统,而不是将其从dockerhub中拉出。
P.S .:关于您已链接到问题的解决方案。这与您的情况(ELF二进制)无关,而与脚本有关。对于脚本,可执行文件格式在文件的开头由shebang(marcelstoer/nodemcu-build
)识别,因此,脚本必须以#!
开头,而不以换行符。这就是为什么作者遇到同样的错误的原因:内核无法检测到这是一个脚本,并且无法启动它。不同(但相似)的原因,相同的错误。