我的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上工作。
答案 0 :(得分:7)
问题确实是Docker映像文件是特定于体系结构的(至少是默认的)。因此,基于Intel构建的Docker文件只能在Intel上运行,而针对Arm32构建的Docker文件仅适用于Arm32。
似乎有多种方法可以在Intel设备上构建Arm版本,但这仍然需要您分发两个单独的映像。而且,如果您有物理的Arm设备,则直接在Arm设备上构建Arm映像要容易得多。
您还需要确保基本映像支持您的体系结构,但是现在官方映像已被构建为多体系结构映像,因此通常这不是问题。