私の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ファイルをどのように修正できますかと思っていたので混乱しています。
問題は、実際にはDockerイメージファイルがアーキテクチャ固有(少なくともデフォルトのもの)であることでした。そのため、IntelでビルドされたDockerファイルはIntelでのみ動作し、Arm32のDockerファイルビルドはArm32でのみ動作します。
IntelデバイスでArmビルドをビルドする方法はあるようですが、それでも2つの別々のイメージを配布することになります。また、物理的なArmデバイスがある場合は、Armデバイスで直接Armイメージを作成する方がはるかに簡単です。
また、ベースイメージがアーキテクチャをサポートしていることを確認する必要がありますが、公式のイメージはマルチアーチイメージとして構築されているため、通常は問題になりません。