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

时间:2018-10-11 19:56:22

标签: 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在arm处理器上支持Docker,而Synology不支持。

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

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

this link使我认为问题出在手臂处理器上。

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

1 个答案:

答案 0 :(得分:7)

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

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

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