Docker 错误 standard_init_linux.go :185: exec user process caused "exec format error with Qnap TS131P

标签 docker arm qnap

我的 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

在 Synology DS218+ Disk Station (Intel) 上运行良好

我购买了 Qnap TS-131P 来测试 Qnap,同时也确认它可以与 Arm 处理器一起使用,因为 Qnap 支持 Docker on arm 处理器,而 Synology 不支持。

当我尝试从图像启动 Container 时出现错误

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

this link 让我认为问题出在 arm 处理器上。

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

最佳答案

问题确实在于 Docker 镜像文件是特定于体系结构的(至少是默认的)。所以基于 Intel 构建的 Docker 文件只能在 Intel 上运行,而为 Arm32 构建的 Docker 文件只能在 Arm32 上运行。

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

您还需要确保您的基础镜像支持您的架构,但官方镜像现在已经构建为多架构镜像,所以这通常不是问题。

关于Docker 错误 standard_init_linux.go :185: exec user process caused "exec format error with Qnap TS131P,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52767983/

相关文章:

ftp - 如何克服Centos到QNAP奇怪的FTP文件大小限制150114776字节?

git - 在Docker容器中使用git

angular - 使用 nginx "no such file or directory"容器化 Angular 应用程序

c++ - 如何展开堆栈以获取指定堆栈指针(SP)的回溯?

c - ARM NEON 8x8 SAD 操作

linux - Perl 编译错误 - make : [pod/perltoc. pod] 段错误

docker - Podman 中的 Podman,类似于 Docker 中的 Docker?

docker - 将 Docker 容器部署到 Cloud Foundry 时,MQTT 端口连接被拒绝

c - 从ARM微 Controller 端口读取数据的步骤