115 votes

L'exécution de l'OCI a échoué : l'exécution a échoué : (...) fichier exécutable non trouvé dans $PATH" : inconnu

J'ai dockerisé une application dans laquelle ffmpeg est installé via libav-tools. L'application se lance sans problème, mais le problème est survenu lorsque le module npm fluent-ffmpeg a essayé d'exécuter la commande ffmpeg, qui n'a pas été trouvée. Lorsque j'ai voulu vérifier la version de ffmpeg et la distro linux installée dans l'image, j'ai utilisé sudo docker exec -it c44f29d30753 "lsb_release -a" mais elle a donné l'erreur suivante : OCI runtime exec failed: exec failed: container_linux.go:296: starting container process caused "exec: \"lsb_release -a\": executable file not found in $PATH": unknown

Puis je me suis rendu compte qu'il me donne la même erreur avec toutes les commandes que j'essaie d'exécuter dans l'image ou le conteneur.

OCI runtime exec failed: exec failed: container_linux.go:296: starting container process caused "exec: \"ffmpeg -a\": executable file not found in $PATH": unknown

C'est mon Dockerfile :

FROM ubuntu:xenial
FROM node
RUN apt-get -y update
RUN apt-get --yes install libav-tools
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app
RUN npm install
COPY . /usr/src/app
RUN npm run build
ENV NODE_ENV production
EXPOSE 8000
CMD ["npm", "run", "start:prod"]

Je vous demande de bien vouloir m'aider. Merci beaucoup !

5 votes

Essayez d'entrer dans votre conteneur avec docker run --rm -ti your-image-name sh et trouvez votre exécutable. Il ne s'agit probablement que d'un problème de PATH (le répertoire dans lequel se trouve votre exécutable n'est pas dans le PATH de l'unité racine du conteneur).

0 votes

J'ai entré le conteneur avec la commande que vous avez recommandée. Le problème est que lorsque j'essaie de faire apt-get install ffmpeg le résultat est : Package ffmpeg is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is only available from another source E: Package 'ffmpeg' has no installation candidate . Cependant, je peux obtenir le même paquet dans mon système d'exploitation ubuntu 16.04. Y a-t-il un problème avec le système d'exploitation dans le conteneur ?

0 votes

Avez-vous couru apt-get update ?

141voto

papigee Points 824

Cela m'est arrivé sous Windows. N'importe laquelle de ces commandes fonctionnera

Sous Windows CMD (sans passer à bash)

docker exec -it <container-id> /bin/sh

Sous Windows CMD (après être passé à bash)

docker exec -it <container-id> //bin//sh

o

winpty docker exec -it <container-id> //bin//sh

Sur Git Bash

winpty docker exec -it <container-id> //bin//sh

NB : Vous devrez peut-être utiliser /bin/bash o /bin/sh en fonction de la coquille de votre conteneur.

La raison est documentée dans le fichier ReleaseNotes de Git et elle est bien expliquée ici - -. Bash dans Git pour Windows : Bizarreries...

"La cause est liée à la tentative de s'assurer que les chemins posix finissent par être transmis aux utilitaires git correctement. Pour cette raison, Git pour Windows inclut une couche MSYS modifiée qui affecte les arguments de commande."

3 votes

Ça marche comme ça : Vous devrez peut-être utiliser /bin/bash ou /bin/sh.

6 votes

kubectl exec -it <pod_name> /bin/sh ça a marché pour moi, merci

38voto

hheimbuerger Points 3156

J'ai eu ce problème à cause d'une simple erreur de commande de ma part. J'ai appelé

[WRONG] docker run <image> <arguments> <command>

Alors que j'aurais dû utiliser

docker run <arguments> <image> <command>

Même résolution sur une question similaire : https://stackoverflow.com/a/50762266/6278

1 votes

Et si j'utilise docker-compose, quelle pourrait être l'erreur ? Je me suis exécuté en utilisant docker-compose -f .\a-docker-compose-file.yml up

2 votes

@otong Votre commentaire n'a rien à voir avec ma réponse. Veuillez le poster en tant que nouvelle question et y donner plus de détails sur votre problème spécifique.

2 votes

Este hace s'applique également à docker compose et l'a corrigé pour moi. Je vous remercie beaucoup.

22voto

Si @papigee ne solution ne fonctionne pas, peut-être que vous n'avez pas les permissions.

J'ai essayé @papigee solution mais ne fonctionne pas sans sudo.

Je l'ai fait :

sudo docker exec -it <container id or name> /bin/sh

0 votes

Merci, Jésus. C'était assez difficile de trouver cette réponse.

19voto

BMitch Points 3744

Débarrassez-vous des guillemets autour de votre commande. Quand vous la citez, Docker essaie d'exécuter la chaîne complète. "lsb_release -a" comme une commande, qui n'existe pas. Au lieu de cela, vous voulez exécuter la commande lsb_release avec un argument -a et aucun devis.

sudo docker exec -it c44f29d30753 lsb_release -a

Notez que tout ce qui suit le nom du conteneur est la commande et les arguments à exécuter à l'intérieur du conteneur, docker ne traitera rien de tout cela comme des options à la commande docker.

5voto

Jeazy Points 21

@papigee devrait fonctionner sous Windows 10 sans problème. J'utilise le terminal intégré VSCode avec git bash et cela fonctionne toujours pour moi.

winpty docker exec -it <container-id> //bin//sh

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X