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?

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'

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

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.


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:
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.