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.