web-dev-qa-db-fra.com

docker: fichier exécutable non trouvé dans $ PATH

J'ai une image de menu fixe qui installe grunt, mais lorsque j'essaye de l'exécuter, j'obtiens une erreur:

Error response from daemon: Cannot start container foo_1: \
    exec: "grunt serve": executable file not found in $PATH

Si je lance bash en mode interactif, grunt est disponible.

Qu'est-ce que je fais mal?

Voici mon Dockerfile:

# https://registry.hub.docker.com/u/dockerfile/nodejs/ (builds on ubuntu:14.04)
FROM dockerfile/nodejs

MAINTAINER My Name, [email protected]

ENV HOME /home/web
WORKDIR /home/web/site

RUN useradd web -d /home/web -s /bin/bash -m

RUN npm install -g grunt-cli
RUN npm install -g bower

RUN chown -R web:web /home/web
USER web

RUN git clone https://github.com/repo/site /home/web/site

RUN npm install
RUN bower install --config.interactive=false --allow-root

ENV NODE_ENV development

# Port 9000 for server
# Port 35729 for livereload
EXPOSE 9000 35729
CMD ["grunt"]
172
Steve Lorimer

Lorsque vous utilisez le format exec pour une commande (par exemple CMD ["grunt"], un tableau JSON avec des guillemets doubles), il sera exécuté sans sans Shell. Cela signifie que la plupart des variables d'environnement ne seront pas présentes.

Si vous spécifiez votre commande en tant que chaîne régulière (par exemple, CMD grunt), la chaîne après CMD sera exécutée avec /bin/sh -c.

Plus d’informations à ce sujet sont disponibles dans la section CMD de la référence Dockerfile .

158
Kevan Ahlquist

Ce fut le premier résultat sur Google lorsque j'ai collé mon message d'erreur, et ce parce que mes arguments étaient hors d'usage.

Le nom du conteneur doit être after tous les arguments.

Mauvais:

docker run <container_name> -v $(pwd):/src -it

Bien:

docker run -v $(pwd):/src -it <container_name>
237
sarink

J'ai trouvé le même problème. J'ai fait ce qui suit:

docker run -ti devops -v /tmp:/tmp /bin/bash

Quand je le change en

docker run -ti -v /tmp:/tmp devops /bin/bash

ça fonctionne bien.

18
keniee van

Il existe plusieurs raisons possibles pour une erreur comme celle-ci.

Dans mon cas, cela était dû au fichier exécutable (docker-entrypoint.sh du Ghost blog Dockerfile ) dépourvu du mode fichier exécutable après l'avoir téléchargé.

Solution: chmod +x docker-entrypoint.sh

7
Ben Creasy

Un conteneur Docker peut être construit sans Shell (par exemple, https://github.com/fluent/fluent-bit-docker-image/issues/19 ).

Dans ce cas, vous pouvez copier un shell compilé statiquement et l'exécuter, par exemple.

docker create --name temp-busybox busybox:1.31.0
docker cp temp-busybox:/bin/busybox busybox
docker cp busybox mycontainerid:/busybox
docker exec -it mycontainerid /bin/busybox sh
3
Gajus

Pour une raison quelconque, je reçois cette erreur à moins d’ajouter le clarificateur "bash". Même ajouter "#!/Bin/bash" en haut de mon fichier de point d'entrée n'a pas aidé.

ENTRYPOINT [ "bash", "entrypoint.sh" ]
0
beyondtheteal