Warum kann ich mit docker run keine CDs in ein Verzeichnis kopieren?

39

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 durch Angabe des vollständigen Pfads ausführen, aber dann stürzt es ab, da es erwartet, vom aktuellen Verzeichnis aus gestartet zu werden. Was kann ich tun?

schmmd
quelle

Antworten:

34

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

sudo docker run -P ubuntu/decomposer /bin/sh -c 'cd /local/deploy/decomposer; ./decomposer-4-15-2014'
Kleber
quelle
docker run centos / bin / sh -c 'cd / bin; / bin / ls 'gibt nichts aus, während der Docker centos / bin / sh -c' / bin / ls / bin 'ausführt.
Seanmcl
Tatsächlich geben beide Befehle die Liste der Dateien im Verzeichnis / bin aus. Versuchte beide.
Glueon
Nicht auf meiner Box, Centos7.
Seanmcl
1
Eigentlich hat sogar das Entfernen der Anführungszeichen um meinen Befehl zum Ausführen gut funktioniert. Ich denke Docker wickelt es /bin/sh -csowieso ein.
schmmd
85

Sie können die -wOption verwenden, um Ihr Arbeitsverzeichnis zu ändern.

docker run

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

In Ihrem Fall würden Sie also Folgendes ausführen:

sudo docker run -w /local/deploy/decomposer -P ubuntu/decomposer ./decomposer-4-15-2014
Vojtech Vitek
quelle
Könnte ich -wmit verwenden docker exec? Ich suche nach einer Möglichkeit, Python-Skript in meinem Container auszuführen, kann es jedoch nicht außerhalb des Containers stoppen.
zx1986
Oh, ich habe die Antwort bekommen ...flag provided but not defined: -w
zx1986
1
Dammit , warum dieser am Boden der ganzen Weg versteckt Referenzseite Docker Laufes ! :-)
Amir Abiri
5
Dies sollte die akzeptierte Antwort sein
fferri
4

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

Randall Smith
quelle
0

Dies liegt möglicherweise an dem Berechtigungsproblem, oder die Instanz kann den verfügbaren Pfad der ausführbaren Datei nicht finden. Um dies zu überprüfen, fügen Sie die ausführbare Datei im Pfad hinzu und führen Sie das Skript aus

Verwenden Sie den folgenden Befehl, um das aktuelle Verzeichnis im Pfad hinzuzufügen

$ export PATH=$PATH:

quelle