388 Stimmen

Docker: ausführbare Datei nicht im $PATH gefunden

Ich habe ein Docker-Image, das grunt installiert, aber wenn ich versuche, es auszuführen, erhalte ich einen Fehler:

Fehlerantwort vom Daemon: Container foo_1 kann nicht gestartet werden: \
    exec: "grunt serve": ausführbare Datei nicht im $PATH gefunden

Wenn ich bash im interaktiven Modus ausführe, ist grunt verfügbar.

Was mache ich falsch?

Hier ist meine Dockerfile:

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

MAINTAINER Mein Name, ich@email.com

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 für den Server
# Port 35729 für Livereload
EXPOSE 9000 35729
CMD ["grunt"]

585voto

Kabir Sarin Punkte 16003

Dies war das erste Ergebnis auf Google, als ich meine Fehlermeldung eingefügt habe, und das lag daran, dass meine Argumente in der falschen Reihenfolge waren.

Der Container-Name muss nach allen Argumenten stehen.

Schlecht:

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

Gut:

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

284voto

Kevan Ahlquist Punkte 5375

Wenn Sie das exec-Format für einen Befehl verwenden (z. B. CMD ["grunt"], ein JSON-Array mit doppelten Anführungszeichen), wird es ohne Shell ausgeführt. Das bedeutet, dass die meisten Umgebungsvariablen nicht vorhanden sein werden.

Wenn Sie Ihren Befehl als regulären String angeben (z. B. CMD grunt), wird der String nach CMD mit /bin/sh -c ausgeführt.

Weitere Informationen dazu finden Sie im CMD-Abschnitt des Dockerfile-Verweises.

33voto

keniee van Punkte 465

Ich habe das gleiche Problem gefunden. Ich habe folgendes gemacht:

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

Als ich es geändert habe zu

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

hat es gut funktioniert.

26voto

beyondtheteal Punkte 549

Aus irgendeinem Grund erhalte ich diesen Fehler, es sei denn, ich füge den "bash" Klarifierer hinzu. Selbst das Hinzufügen von "#!/bin/bash" am Anfang meiner Einstiegspunkt-Datei hat nicht geholfen.

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

19voto

Ben Creasy Punkte 3379

Es gibt mehrere mögliche Gründe für einen Fehler wie diesen.

In meinem Fall lag es daran, dass die ausführbare Datei (docker-entrypoint.sh aus dem Ghost Blog Dockerfile) nach dem Herunterladen nicht im ausführbaren Dateimodus vorhanden war.

Lösung: chmod +x docker-entrypoint.sh

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X