web-dev-qa-db-fra.com

Pourquoi mon docker-entrypoint.sh ne s'exécute-t-il pas?

Mon script ENTRYPOINT ne s’exécute pas et jette standard_init_linux.go:175: exec user process caused "no such file or directory". Pourquoi

Ne fonctionne pas

$ docker build -t gilani/trollo . && docker run gilani/trollo
Sending build context to Docker daemon   126 kB
Step 1 : FROM vault:latest
 ---> 1f127f53f8b5
Step 2 : MAINTAINER Amin Shah Gilani <[email protected]>
 ---> Using cache
 ---> 86b885ca1c81
Step 3 : COPY vaultConfig.json /vault/config
 ---> Using cache
 ---> 1a2be2fa3acd
Step 4 : COPY ./docker-entrypoint.sh /
 ---> Using cache
 ---> 0eb7c1c992f1
Step 5 : RUN chmod +x /docker-entrypoint.sh
 ---> Running in 251395c4790f
 ---> 46aa0fbc9637
Removing intermediate container 251395c4790f
Step 6 : ENTRYPOINT /docker-entrypoint.sh
 ---> Running in 7434f052178f
 ---> eca040859bfe
Removing intermediate container 7434f052178f
Successfully built eca040859bfe
standard_init_linux.go:175: exec user process caused "no such file or directory"

Dockerfile:

FROM vault:latest

MAINTAINER Amin Shah Gilani <[email protected]>

COPY vaultConfig.json /vault/config

COPY ./docker-entrypoint.sh /

RUN chmod +x /docker-entrypoint.sh

ENTRYPOINT ["/docker-entrypoint.sh"]

docker-entrypoint.sh:

#!/bin/bash

echo 'Hello World!'

Travaux

$ docker build -t gilani/trollo . && docker run gilani/trollo
Sending build context to Docker daemon   126 kB
Step 1 : FROM vault:latest
 ---> 1f127f53f8b5
Step 2 : MAINTAINER Amin Shah Gilani <[email protected]>
 ---> Using cache
 ---> 86b885ca1c81
Step 3 : COPY vaultConfig.json /vault/config
 ---> Using cache
 ---> 1a2be2fa3acd
Step 4 : ENTRYPOINT echo 'hello world'
 ---> Using cache
 ---> ef5792a1f252
Successfully built ef5792a1f252
'hello world'

Dockerfile:

FROM vault:latest

MAINTAINER Amin Shah Gilani <[email protected]>

COPY vaultConfig.json /vault/config

ENTRYPOINT ["echo", "'hello world'"]
31
Upvote Me

le vault:latest l'image ne contient pas /bin/bash que vous essayez d'appeler avec votre Shebang #!/bin/bash. Vous devriez soit changer cela en #!/bin/sh ou supprimez complètement le Shebang de votre script.

33
P.J.Meisch

J'étais en train de me déchirer les cheveux avec un problème très similaire à celui-ci. Dans mon cas,/bin/bash DID existe. Mais en réalité, le problème était celui des fins de ligne Windows.

Dans mon cas, le dépôt git avait un script de point d’entrée avec des fins de ligne Unix (\ n). Mais lorsque le référentiel a été extrait sur une machine Windows, git a décidé d'essayer d'être intelligent et de remplacer les fins de ligne dans les fichiers par des fins de lignes Windows (\ r\n).

Cela signifiait que Shebang ne fonctionnait pas car au lieu de chercher/bin/bash, il cherchait/bin/bash\r

La solution pour moi était de désactiver la conversion automatique de git: git config --global core.autocrlf input Ensuite, vérifiez à nouveau le référentiel et reconstruisez-le.

Quelques informations plus utiles ici: Comment modifier les paramètres de fin de ligne et ici http://willi.am/blog/2016/08/11/docker-for-windows-dealing- with-windows-line-endings /

59
Daniel Howard

Sans voir votre image, mon idée initiale est que vous n’avez pas/bin/bash dans votre image. Changer la première ligne de votre docker-entrypoint.sh en:

#!/bin/sh

va probablement le résoudre.

8
BMitch

Une autre possibilité:

Vérifiez que le fichier n'est pas enregistré avec les fins de ligne Windows (CRLF). Si c'est le cas, enregistrez-le avec les fins de ligne Unix (LF) et vous le retrouverez.

4
Ryan Allen

Gosh j'ai lutté pendant 2-3 heures! Merci à @Ryan Allen Pour mon cas, c'était un problème de CRLF. Je travaille sur les manifestes de marionnettes sur ATOM pour la configuration de jenkins. Assurez-vous que vous utilisez ATOM ou tout autre IDE Sous Windows, lorsque vous amenez votre fichier (en particulier .sh) en unix, convertissez-le au format Unix.

  exec {'dos2unix':
    path      => ['/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/opt/puppetlabs/bin'],
    command   => 'dos2unix /dockerwork/puppet/jenkins/files/*',
    subscribe => File['/dockerwork/puppet/jenkins/files/init.sh'],
  }
1

Une autre raison pour laquelle cette erreur se produit est si votre mot de passe d'utilisateur Windows change.

Dans mon cas, mes terminaisons de ligne entrypoint.sh étaient LF mais je recevais toujours l'erreur. Notre administrateur a une réinitialisation obligatoire du mot de passe environ tous les mois. Chaque fois que cela se produit, je rencontre l'erreur. Si tel est votre motif, vous devrez peut-être réinitialiser vos informations d'identification dans les paramètres du menu fixe sous "Lecteurs partagés".

Désélectionnez le lecteur et appliquez-le. Puis resélectionnez le lecteur et appliquez. Il vous demandera votre mot de passe.

1
dcinadr

Ce problème concerne les fins de ligne et je l'ai résolu avec la solution ci-dessous.

Convertir le fichier DOS au format unix. Cela supprime les fins de ligne câblées.

dos2unix - est disponible dans Alpine ainsi que dans d'autres distributions Linux.

Je l'ai utilisé comme ça:

RUN apk add dos2unix && dos2unix /entry.sh

0
Ferdie De Oliveira

Mon cas était que l'image alpine que j'utilisais ne venait pas du tout avec bash ... RUN apk-install bash a fait le tour évidemment

0
Painy James