web-dev-qa-db-ja.com

Dockerエラーstandard_init_linux.go:185:execユーザープロセスにより「Qnap TS131Pでexec形式エラーが発生しました」

私の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はArmプロセッサでDockerをサポートしていますが、Synologyはサポートしていないため、QnapでテストするためにQnap TS-131Pを購入しました。

イメージからコンテナを起動しようとすると、エラーが発生します

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

このリンク は、問題がアームプロセッサに起因していると思わせます。

しかし、Dockerの重要なポイントはこれらのシステム固有の詳細を隠すことであり、Qnapで動作するようにDockerファイルをどのように修正できますかと思っていたので混乱しています。

10
Paul Taylor

問題は、実際にはDockerイメージファイルがアーキテクチャ固有(少なくともデフォルトのもの)であることでした。そのため、IntelでビルドされたDockerファイルはIntelでのみ動作し、Arm32のDockerファイルビルドはArm32でのみ動作します。

IntelデバイスでArmビルドをビルドする方法はあるようですが、それでも2つの別々のイメージを配布することになります。また、物理的なArmデバイスがある場合は、Armデバイスで直接Armイメージを作成する方がはるかに簡単です。

また、ベースイメージがアーキテクチャをサポートしていることを確認する必要がありますが、公式のイメージはマルチアーチイメージとして構築されているため、通常は問題になりません。

12
Paul Taylor