Ich versuche, MULTIPLE-Befehle wie diesen auszuführen.
docker run image cd /path/to/somewhere && python a.py
Dies gibt mir jedoch den Fehler "Keine solche Datei oder kein solches Verzeichnis", da es als ...
"docker run image cd /path/to/somewhere" && "python a.py"
Es scheint, dass einige ESCAPE-Zeichen wie "" oder () benötigt werden.
Also habe ich es auch versucht
docker run image "cd /path/to/somewhere && python a.py"
docker run image (cd /path/to/somewhere && python a.py)
aber diese haben nicht funktioniert.
Ich habe nach Docker Run Reference gesucht, aber keine Hinweise zu ESCAPE-Zeichen gefunden.
docker
docker-image
ai0307
quelle
quelle
docker run alpine sh -c "ls | wc >> xxx"
Das hilft mir sehr, wenn Bash nicht verfügbar ist.cd
aber nicht für Dinge, bei denen Rückkehrcodes;
nicht dasselbe sind wie&&
unter unix.stackexchange.com/questions/37069/…Sie können dies auf verschiedene Arten tun:
Verwenden Sie die Option -w, um das Arbeitsverzeichnis zu ändern:
https://docs.docker.com/engine/reference/commandline/run/#set-working-directory--w
Übergeben Sie das gesamte Argument an / bin / bash:
quelle
--workdir
im angegebenen Link. Die Seite wurde wahrscheinlich verschoben / geändert. Könnte auf docs.docker.com/engine/reference/run/#workdir oder docs.docker.com/engine/reference/commandline/runSie können Befehle auch im Docker-Container weiterleiten,
bash -c "<command1> | <command2>"
z. B.:Ohne Aufrufen der Shell in der Fernbedienung wird die Ausgabe jedoch an das lokale Terminal umgeleitet.
quelle
Wenn Sie das Ergebnis in einer Datei außerhalb des Containers auf Ihrem lokalen Computer speichern möchten, können Sie Folgendes tun.
Das Ergebnis Ihrer Befehle ist
/tmp/result.txt
auf Ihrem lokalen Computer verfügbar .quelle
Für alle anderen, die hierher gekommen sind, um dasselbe mit
docker-compose
Ihnen zu tun, müssen Sie nurbash -c
mehrere Befehle voranstellen und in Anführungszeichen setzen, die mit verbunden sind&&
.Also im OP-Beispiel
docker-compose run image bash -c "cd /path/to/somewhere && python a.py"
quelle
docker-compose down [service-name]
nicht oder? (und keine Sorge, Sie sind willkommen, helfen gerne :))Nur um eine richtige Antwort aus dem Kommentar von @Eddy Hernandez zu geben, und das ist sehr richtig, da Alpine mit Asche kommt, nicht mit Bash.
Die Frage bezieht sich nun auf das Starten einer Shell im Docker Alpine-Container, was die Verwendung von
sh
oderash
oder/bin/sh
oder impliziert/bin/ash/
.Basierend auf der Frage des OP:
docker run image sh -c "cd /path/to/somewhere && python a.py"
quelle
bash -c
funktioniert gut, wenn die von Ihnen ausgeführten Befehle relativ einfach sind. Wenn Sie jedoch versuchen, eine lange Reihe von Befehlen mit Steuerzeichen auszuführen, kann dies komplex werden.Ich habe dies erfolgreich umgangen, indem ich meine Befehle von außen in den Prozess geleitet habe, d. H.
cat script.sh | docker run -i <image> /bin/bash
quelle