Docker 错误 standard_init_linux.go:185:exec 用户进程导致"Qnap TS131P 执行格式错误"



我的Docker文件是 https://hub.docker.com/r/songkong/songkong/~/dockerfile/的song/songkong

FROM openjdk:8-jre-alpine
RUN apk --no-cache add 
ca-certificates 
curl 
fontconfig 
msttcorefonts-installer 
tini 
&& update-ms-fonts 
&& fc-cache -f
RUN mkdir -p /opt 
&& curl http://www.jthink.net/songkong/downloads/current/songkong-linux-headless-novm.tgz?val=77 | tar -C /opt -xzf - 
&& find /opt/songkong -perm /u+x -type f -print0 | xargs -0 chmod a+x
RUN addgroup -S songkong 
&& adduser -S -G songkong songkong
USER songkong:songkong
EXPOSE 4567
ENTRYPOINT ["/sbin/tini"]
# Config, License, Logs, Reports and Internal Database
VOLUME /songkong
# Music folder should be mounted here
VOLUME /music
WORKDIR /opt/songkong
CMD /opt/songkong/songkongremote8.sh

它与群晖 DS218+ 磁盘站(英特尔(配合使用正常

我購買了 Qnap TS-131P 來與 Qnap 進行測試,也是為了確認它與 Arm 處理器配合使用,因為 Qnap 支援 Docker 在 Arm 處理器上,而 Synology 則不支持。

当我尝试从映像启动容器时,出现错误

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

这个链接让我认为问题是由于 ARM 处理器造成的。

但是我很困惑,因为我认为Docker的全部意义在于隐藏这些系统特定的详细信息,如何(我可以(修复我的Docker文件,使其在Qnap上运行。

问题确实是 Docker 镜像文件是特定于架构的(至少是默认的(。因此,基于 Intel 构建的 Docker 文件仅适用于 Intel,而针对 Arm32 构建的 Docker 文件仅适用于 Arm32。

似乎有一些方法可以在英特尔设备上构建 Arm 构建,但这仍然会让您分发两个单独的映像。如果你有一个物理 Arm 设备,直接在 Arm 设备上构建 Arm 映像要容易得多。

您还需要确保您的基础映像支持您的架构,但官方映像现已构建为多架构映像,因此这通常不是问题。

相关内容

  • 没有找到相关文章

最新更新