web-dev-qa-db-fra.com

Erreur Docker standard_init_linux.go: 185: le processus utilisateur exec a provoqué une "erreur de format exec avec Qnap TS131P

Mon fichier Docker est 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

cela fonctionne bien avec un Synology DS218 + Disk Station (Intel)

J'ai acheté un Qnap TS-131P à tester avec Qnap, mais aussi pour confirmer qu'il fonctionne avec un processeur Arm, car Qnap prend en charge les processeurs Docker sur bras, contrairement à Synology.

Lorsque j'essaie de démarrer Container à partir de l'image, un message d'erreur s'affiche.

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

et ce lien me fait penser que le problème est dû au processeur de bras.

Mais je suis confus, car je pensais que le but de Docker était de cacher ces détails spécifiques au système, comment (puis-je) réparer mon fichier Docker pour qu'il fonctionne sur Qnap.

1
Paul Taylor

Le problème était en effet que les fichiers image Docker sont spécifiques à l’architecture (du moins ceux par défaut). Ainsi, un fichier Docker créé sur Intel ne fonctionnera que sur Intel et une compilation de fichier Docker pour Arm32 ne fonctionnera que pour Arm32.

Il semble qu'il existe des moyens de créer une version Arm sur un périphérique Intel, mais cela vous laisserait toujours avec la distribution de deux images distinctes. Et si vous avez un périphérique Arm physique, il est beaucoup plus facile de créer une image Arm directement sur un périphérique Arm.

Vous devez également vous assurer que votre image de base prend en charge votre architecture, mais celle-ci officielle étant désormais conçue en tant qu’images multi-arch, ce n’est donc généralement pas un problème.

3
Paul Taylor