2016-03-15 5 views
0

Je fais quelque chose d'extrêmement simple. Voici mon Dockerfile:Fichier introuvable dans le conteneur docker

FROM alpine:latest 

ADD hello.sh /bin/hello 
RUN chmod +x /bin/hello 

CMD /bin/hello 

Puis-je construire l'image:

docker build -t hello . 

Puis je lance l'image:

docker run hello 

Et voici la sortie:

/bin/sh: /bin/hello: not found 

Pourquoi cela se produit-il? Si je cours:

docker run hello cat /bin/hello 

Je peux voir le contenu de mon script, ce qui me rend encore plus confus.

+0

J'ai répliqué vos étapes ci-dessus en utilisant ma propre image docker, et cela a très bien fonctionné, pas de problèmes. Donc, le problème doit être avec l'image docker que vous basez sur. Le fichier existe clairement. Cela doit être un problème d'autorisations. Vous devriez vérifier pour voir quel utilisateur vous êtes par défaut, vos permissions, etc. Pouvez-vous nous indiquer le 'Dockerfile' d'origine alpine, et nous pouvons donner plus de détails? – CtheGood

+1

Après avoir réfléchi un peu plus, j'ai une autre hypothèse. Le point d'entrée de l'image du docker peut être en train de changer votre utilisateur ou de jouer avec votre terminal bash. Essayez d'exécuter ce 'docker run -it hello bash', puis d'exécuter' hello' une fois à l'intérieur du conteneur (et publiez la sortie). Cela nous dirait si le 'entrypoint' et/ou' CMD' de l'image fait quelque chose d'étrange. La raison pour laquelle votre deuxième exemple aurait fonctionné est parce qu'il écrasait le 'CMD' du Dockerfile spécifiquement. – CtheGood

+0

Bonjour @CtheGood, merci d'avoir examiné ce problème. Votre commentaire m'a fait réfléchir et je pense que c'est une sorte de problème d'utilisateur/groupe/permission.J'ai donc écrit le script sur un ordinateur ubuntu et j'essaie de l'exécuter dans une image alpine, et cela semble être à l'origine du problème. Une fois que je suis passé à une image ubuntu, le problème disparaît. –

Répondre

0

Problème résolu en utilisant une image ubuntu au lieu d'une image alpine. Vous ne savez pas exactement pourquoi, mais vous pourriez avoir à faire avec les bits d'utilisateur/d'autorisation du fichier copiés et non interprétés correctement.

+0

Il peut être différent problème de shell aussi bien! Vous pouvez essayer de vérifier le shell actuel. – ASR

0

J'ai eu le même problème où, peu importe la façon dont mon application python était simple (figurez-vous que les sorties hello.py « bonjour »), lors de l'exécution par docker-Compose construire & & des commandes Je suis erreur bonjour. py - non trouvé. Il s'est avéré que le problème était que virtualbox n'a pas monté mon dossier (app) correctement. Ce fut un sauvetage et résolu mon problème en 5 minutes: Docker + Ubuntu + Virtualbox: "volumes" directive in dockerfile not working

+0

Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée est modifiée – slfan

0

Le fichier ne peut être trouvé à partir de:

  • le fichier est en fait pas, vérifier les fautes de frappe, assurez-vous n » est t essayant d'exécuter une commande quoted et tous les arguments ensemble quand vous devriez seulement exécuter la commande (pas ce problème, mais vu plusieurs fois). Et assurez-vous que vous ne montez pas un volume au-dessus de l'endroit où vous attendez votre commande.
  • La commande en haut du script n'existe pas. Par exemple. essayer d'appeler bash quand le conteneur n'a que sh. Cela s'applique également à ceux qui créent le script sous Windows et qui ont des sauts de ligne incorrects à la fin de la commande. Je ne crois pas qu'Alpin inclue un bash là où d'autres images de base le font.
  • le binaire que vous essayez d'exécuter des bibliothèques de liens qui n'existent pas dans le conteneur. Ceci est vu avec Alpine avec les différences de version de musc libc.