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"]

1voto

Das Problem liegt bei glibc, das nicht Teil des Alpine-Basisimages ist.

Nachdem ich es hinzugefügt habe, hat es bei mir funktioniert :)

Hier sind die Schritte, um glibc zu erhalten

apk --no-cache add ca-certificates wget
wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.28-r0/glibc-2.28-r0.apk
apk add glibc-2.28-r0.apk

1voto

Vito Punkte 1190

Ich bin auf dieses Problem gestoßen, als ich docker-compose verwendet habe. Keine der Lösungen hier oder auf dieser verwandten Frage hat mein Problem gelöst. Letztendlich hat bei mir geholfen, alle zwischengespeicherten Docker-Artefakte mit docker prune -a zu löschen und Docker neu zu starten.

0voto

Jon Punkte 99

Bezugnahme auf den Titel.

Mein Fehler bestand darin, Variablen über --env-file während docker run zu setzen. Unter anderem bestand die Datei aus einer PATH-Erweiterung: PATH=$PATH:something, was dazu führte, dass die PATH-Variable buchstäblich wie PATH=$PATH:something aussah (die Variablenauflösung wurde nicht durchgeführt) anstatt von PATH:/usr/bin...:something.

Ich konnte die Auflösung nicht über --env-file zum Laufen bringen, daher sehe ich den einzigen Weg, wie dies funktioniert, darin, ENV im Dockerfile zu verwenden.

-8voto

vacavaca Punkte 5

Um es zum Laufen zu bringen, fügen Sie eine symbolische Verknüpfung zu /usr/bin hinzu:

ln -s $(which node) /usr/bin/node

ln -s $(which npm) /usr/bin/npm

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