Warum kann ich mit Docker run keine CD in ein Verzeichnis schreiben?

Ich muss eine Anwendung aus einem bestimmten Verzeichnis ausführen.

$ sudo docker run -P ubuntu/decomposer 'cd /local/deploy/decomposer; ./decomposer-4-15-2014'2014/10/09 21:30:03 exec: "cd /local/deploy/decomposer; ./decomposer-4-15-2014": stat cd /local/deploy/decomposer; ./decomposer-4-15-2014: no such file or directory

Dieses Verzeichnis existiert definitiv, und wenn ich durch interaktives Ausführen von bash eine Verbindung zu Docker herstelle, kann ich den obigen Befehl ausführen.

$ sudo docker run -i -t ubuntu/decomposer /bin/bash# cd /local/deploy/decomposer; ./decomposer-4-15-2014

Ich kann mein Programm ausführen, indem ich den vollständigen Pfad angebe, aber dann stürzt es ab, da es erwartet, aus dem aktuellen Verzeichnis gestartet zu werden. Was kann ich tun?

Sie können verwenden -w option zum Ändern Ihres Arbeitsverzeichnisses.

docker run  -w, --workdir=""           Working directory inside the container

In Ihrem Fall würden Sie also rennen:

sudo docker run -w /local/deploy/decomposer -P ubuntu/decomposer ./decomposer-4-15-2014

Übergeben Sie Ihren Befehl wie folgt als Argument an / bin / sh:

sudo docker run -P ubuntu/decomposer /bin/sh -c 'cd /local/deploy/decomposer; ./decomposer-4-15-2014'

Verwenden Sie WORKDIR in Ihrer Docker-Datei, um das Arbeitsverzeichnis festzulegen. Dann können Sie Ihren Befehl mit EXEC ausführen.

Dies kann an einem Berechtigungsproblem liegen oder die Instanz kann den verfügbaren ausführbaren Pfad nicht finden. Um dies zu überprüfen, fügen Sie den verfügbaren Speicherort der ausführbaren Datei in path hinzu und versuchen Sie, das Skript auszuführen

um das aktuelle Verzeichnis in path hinzuzufügen, verwenden Sie bitte den folgenden Befehl

$ export PATH=$PATH:

Ich habe ein ähnliches Beispiel von dieser Website https://djangostars.com/blog/what-is-docker-and-how-to-use-it-with-python/#header13:

docker run -d --name "test-nginx" -p 8080:80 -v $(pwd):/usr/share/nginx/html:ro nginx:latest

Dieser Befehl funktioniert nicht unter Git Bash und Windows.

Die Lösung war zu verwenden cd statt $(pwd):

docker run -d --name "test-nginx" -p 8080:80 -v cd:/usr/share/nginx/html:ro nginx:latest