standard_init_linux.aller:190: exec utilisateur processus a entraîné “aucun fichier ou répertoire” - Docker
Quand je suis en cours d'exécution de mon menu fixe l'image sur windows 10. J'obtiens cette erreur:
standard_init_linux.go:190: exec user process caused "no such file or directory"
mon docker fichier est:
FROM openjdk:8
EXPOSE 8080
VOLUME /tmp
ADD appagent.tar.gz /opt/app-agent
ADD services.jar app.jar
ADD run.sh /run.sh
# Install compiler and perl stuff
RUN apt-get update
RUN apt-get install -y build-essential
RUN apt-get install -y gcc-multilib
RUN apt-get install -y perl
# Install Percona Toolkit
RUN apt-get install --yes percona-toolkit
RUN ["chmod", "+x", "/run.sh"]
ENTRYPOINT ["/run.sh"]
et le script est de commencer avec #!/bin/sh
#!/bin/sh
set -e
JAVA_OPTS="-Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/urandom"
if [ "${APPD_APP_NAME}" != "" ]; then
JAVA_AGENT="-javaagent:/opt/app-agent/javaagent.jar
fi
exec java ${JVM_OPTS} ${JAVA_OPTS} ${JAVA_AGENT} -jar /app.jar
Essayé method1:
Essayé de changer #!/bin/sh pour #!/bin/bash mais se même erreur.
Essayé method2:
ajouté dos2unix dans le panneau de fichier
RUN apt-get install -y dos2unix
RUN dos2unix /run.sh
Vous devez vous connecter pour publier un commentaire.
Utiliser notepad++, allez dans edit -> conversion EOL -> changement de CRLF à la FL.
changement de point d'entrée comme ci-dessous. Il a travaillé pour moi
Comme tuomastik souligné dans les commentaires, les docs nécessitent le premier paramètre à l'exécutable:
"sh"
, normal shell traitement ne se fait pas sourcedans mon cas, j'ai dû changer de ligne fin de
CRLF
àLF
pour larun.sh
fichier et l'erreur a disparu.J'espère que cette aide,
Kirsten
J'ai eu le même problème lors de l'utilisation de la
alpine
image.Mon
.sh
fichier a la suite de la première ligne:Alpin n'a pas de bash. Par conséquent, la modification de la ligne de
ou de l'installation de bash avec
résolu le problème pour moi.
Remplacement CRLF à la FL en utilisant Notepad++
joliment. Il vous suffit d'afficher le Remplacer le dialogue (CTRL+H), sélectionnez
Extended mode de recherche (ALT+X), recherche pour “\r\n” et le remplacer par
“\n”:
Reconstruire et exécutez le panneau de l'image devrait résoudre votre problème.
C'est un CRLF problème. J'ai résolu le problème en utilisant ceci:
Ajouter à votre Dockerfile
"No such file or directory" est à venir à partir de Linux, et j'ai vu l'une des causes suivantes:
Cause première n'est pas réellement avoir le fichier à l'intérieur de votre conteneur. Certaines personnes essayez d'exécuter une commande à partir de l'hôte, sans ajouter à leur image. Certaines personnes de l'ombre de leur commande par le montage d'un volume sur le dessus de la commande qu'ils voulaient courir. Si vous exécutez le même conteneur, mais avec un shell au lieu de normal de votre point d'entrée/cmd valeur, et d'exécuter une
ls /path/to/cmd
vous verrez si cela existe.La prochaine cause est en cours d'exécution de la commande incorrect. Cette s'avère souvent avec json/exec mise en forme de l'exécution de la commande qui n'a pas l'analyser correctement. Si vous voyez une commande essayez d'exécuter
["app",
ou quelque chose de similaire, la chaîne json n'est pas analysée par Docker et Linux est d'essayer d'utiliser un shell pour analyser la commande sous la forme d'une chaîne. Cela peut aussi arriver si vous misorder les arguments, par exemple en essayant de lancer-it
est un signe que vous avez essayé de placer des drapeaux après le nom de l'image quand ils doivent être placés avant le nom de l'image.Avec des scripts shell, cette erreur s'affiche si la première ligne avec la
#!
points à une commande qui n'existe pas à l'intérieur du conteneur. Pour certains, c'est d'essayer d'exécuterbash
dans une image qui n'a/bin/sh
. Et dans votre cas, cela peut être à partir de Windows des sauts de ligne dans le script. De commutation pour Linux/Unix des sauts de ligne dans votre éditeur de corriger cela.Avec les fichiers binaires, cette erreur s'affiche si une bibliothèque de liens est manquant. J'ai vu cela souvent lorsque vous Passez des commandes qui sont compilées avec
libc
, mais de l'exécuter sur le ski alpin avecmusl
ou zéro sans bibliothèques. Vous devez inclure toutes les bibliothèques manquantes ou compiler en statique de votre commande. Pour voir ces de la bibliothèque de liens, utilisezldd /your/app
sur votre binaire.