So führen Sie 2 Befehle mit Docker Exec aus


84

Ich muss 2 Befehle mit Docker Exec ausführen. Ich kopiere eine Datei aus dem Docker-Container und möchte mich nicht mit Anmeldeinformationen befassen müssen, um so etwas wie ssh zu verwenden. Dieser Befehl kopiert eine Datei:

sudo docker exec boring_hawking tar -cv /var/log/file.log | tar -x

Aber es wird ein Unterverzeichnis var / log erstellt. Ich möchte das vermeiden. Wenn ich dies im Docker-Container tun könnte, wäre ich gut:

cd /var/log ; tar -cv ./file.log

Wie kann ich Docker Exec dazu bringen, 2 Befehle auszuführen?

Antworten:


136

Dies führte zu der Antwort: Escape-Zeichen in der Docker-Befehlszeile Am Ende tat ich Folgendes:

sudo docker exec boring_hawking bash -c 'cd /var/log ; tar -cv ./file.log' | tar -x

Es funktioniert also sozusagen, indem der Befehl one bash mit einem Parameter ausgeführt wird, der die beiden Befehle sind, die ich ausführen möchte.


Vielen Dank, das hilft mir sehr
— UnSaid

Wenn Sie doppelte Anführungszeichen innerhalb des Befehls haben, können Sie dies tun, -c "cd /var/log; tar -cv \"$1\""wenn sich die Datei auf Parameter 1 befindet.
— zed

27

Sehr oft müssen mehrere Befehle das Arbeitsverzeichnis ändern - wie in der Frage des OP.

Dafür hat Docker jetzt die -wMöglichkeit, das Arbeitsverzeichnis anzugeben. ZB im vorliegenden Fall

docker exec -w /var/log boring_hawking tar -cv ./file.log

Wirklich nützlich, das ist der richtige Weg.
— TortelliEngineer

genau das habe ich gesucht!
— Clay Mitchell

11

Für alle anderen, die darüber stolpern und auf andere Weise mehrere Befehle angeben möchten, um ein komplexeres Skript auszuführen:

cat <<EOF | docker exec --interactive boring_hawking sh
cd /var/log
tar -cv ./file.log
EOF

Dies ist eine sehr gut lesbare Lösung, wenn Sie ein komplexeres Skript ausführen möchten. Es verdient mehr Stimmen;)
— Slava Fomin II

Ich the input device is not a TTY
— erhalte

Das --interactivesoll sich darum kümmern, wenn das nicht der Fall ist, bin ich mir nicht sicher, was los ist, ohne einen breiteren Kontext darüber zu haben, wie Sie dies verwenden.
— Zbrunson

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.