Frage Warum kann ich nicht mit docker run in ein Verzeichnis wechseln?


Ich muss eine Anwendung von einem spezifischen Verzeichnis laufen lassen.

$ 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 eine Verbindung zum Docker herstelle, indem ich bash interaktiv ausführe, 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 festlege, aber dann stürzt es ab, da erwartet wird, dass es vom aktuellen Verzeichnis aus gestartet wird. Was kann ich machen?


28
2017-10-09 21:34


Ursprung




Antworten:


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

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

28
2017-10-09 22:01



docker laufen centos / bin / sh -c 'cd / bin; / bin / ls 'druckt nichts, während docker run centos / bin / sh -c' / bin / ls / bin 'funktioniert. - seanmcl
Tatsächlich geben beide Befehle die Liste der Dateien im Verzeichnis / bin aus. Versuchte beide. - Glueon
Nicht auf meiner Box, Centos7. - seanmcl
Eigentlich funktionierte es sogar gut, nur die Anführungszeichen zu entfernen, um meinen Befehl auszuführen. Ich denke, Docker wickelt es in ein /bin/sh -c sowieso. - schmmd


Sie können verwenden -w Möglichkeit, Ihr Arbeitsverzeichnis zu ändern.

docker run

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

Also, in Ihrem Fall würden Sie laufen:

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

58
2017-12-09 20:01



Könnte ich benutzen? -w mit docker exec ? Ich suche nach einer Möglichkeit, Python-Skript in meinem Container auszuführen, kann es aber nicht außerhalb des Containers stoppen. - zx1986
Oh, ich habe die Antwort .... flag provided but not defined: -w - zx1986
Verdammt, warum hat das den ganzen Weg auf dem Boden der versteckt docker run Referenzseite! :-) - Amir Abiri
Dies sollte die akzeptierte Antwort sein - fferri


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


3
2017-10-10 03:34





Dies kann auf das Berechtigungsproblem zurückzuführen sein oder die Instanz kann den ausführbaren Pfad nicht finden. Um dies zu überprüfen, fügen Sie den Pfad zur ausführbaren Datei in Pfad hinzu und versuchen Sie, das Skript auszuführen

Um das aktuelle Verzeichnis im Pfad hinzuzufügen, verwenden Sie bitte den folgenden Befehl

$ export PATH=$PATH:

0
2017-10-09 21:50