簡體   English   中英

Docker中的NodeMCU構建會導致“ exec格式錯誤”

[英]NodeMCU Build in Docker results in “exec format error”

我第一次嘗試在Ubuntu 16.04.4 LTS中構建NodeMCU Docker。 我在這里閱讀了有關Docker和NodeMCU的標記文章,但是沒有看到此特定錯誤。

“ docker run hello-world”沒有問題。

我已經嘗試過兩種形式的NodeMCU build命令:

$ 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"

我已經搜索了此錯誤,並且大多數解決方案都與丟失的shebang有關。

但是,我不確定哪個腳本需要使用shebang,或者為什么它在我的情況下不起作用,但對於其他腳本卻是正確的。
還有其他人遇到此錯誤嗎?

說起沒有深入的技術細節,此錯誤意味着內核無法識別可執行文件的格式,因此,它無法運行此文件。 在您的情況下,此錯誤與啟動容器時啟動的可執行文件有關。 根據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映像。

按照Dockerfilemarcelstoer/nodemcu-build圖像,它是由內置ubuntu ,它存在於不同的架構,因此,您可以嘗試建立marcelstoer/nodemcu-build你的系統上的圖像,而不是從dockerhub拉。

PS:關於您已鏈接到問題的解決方案。 這與您的情況(ELF二進制)無關,而與腳本有關。 如果是腳本,則可執行文件格式在文件的開頭由shebang( #! )識別,因此,腳本必須#!開頭#! ,而不是換行符。 這就是為什么作者遇到同樣的錯誤的原因:內核無法檢測到這是一個腳本,並且無法啟動它。 不同(但相似)的原因,相同的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM