Docker错误standard_init_linux.go:185:exec用户进程导致Qnap TS131P出现“ exec格式错误”

Pau*_*lor 11 arm qnap docker

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

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
Run Code Online (Sandbox Code Playgroud)

与Synology DS218 + Disk Station(Intel)搭配运作良好

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

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

standard_init_linux.go:185: exec user process caused "exec format error 
Run Code Online (Sandbox Code Playgroud)

这个环节让我觉得这个问题是由于ARM处理器。

但是我感到困惑,因为我认为Docker的全部目的是隐藏这些系统特定的细节,以及如何(可以)修复我的Docker File使其可以在Qnap上使用。

Pau*_*lor 13

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

似乎有多种方法可以在Intel设备上构建Arm版本,但这仍然需要您分发两个单独的映像。而且,如果您有物理Arm设备,则直接在Arm设备上构建Arm映像会容易得多。

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