Jak uruchomić 2 polecenia za pomocą docker exec


89

Muszę uruchomić 2 polecenia za pomocą docker exec. Kopiuję plik z kontenera Dockera i nie chcę mieć do czynienia z poświadczeniami, aby użyć czegoś takiego jak ssh. To polecenie kopiuje plik:

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

Ale tworzy podkatalog var / log, chcę tego uniknąć, więc gdybym mógł to zrobić w kontenerze docker, powinienem być dobry:

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

Jak sprawić, by docker exec uruchamiał 2 polecenia?

Odpowiedzi:


138

To doprowadziło do odpowiedzi: Escape character w wierszu poleceń Dockera Skończyło się na tym:

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

Działa więc, jakby uruchamiając jedno polecenie bash z parametrem, czyli dwoma poleceniami, które chcę uruchomić.


Dziękuję bardzo, to mi bardzo pomaga
UnSaid

Jeśli masz podwójne cudzysłowy w poleceniu, możesz to zrobić, -c "cd /var/log; tar -cv \"$1\""jeśli plik ma parametr 1.
zed

28

Dość często potrzeba kilku poleceń, aby zmienić katalog roboczy - jak w pytaniu OP.

W tym celu docker ma teraz -wopcję określenia katalogu roboczego. Np. W niniejszej sprawie

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

Naprawdę przydatne, to jest droga.
TortelliEngineer

to jest dokładnie to, czego szukałem!
Clay Mitchell

13

Dla każdego, kto natknie się na to i chce innego sposobu określenia wielu poleceń w celu wykonania bardziej złożonego skryptu:

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

Jest to bardzo przyjemne, czytelne rozwiązanie, gdy chcesz wykonać bardziej złożony skrypt. Zasługuje na więcej głosów;)
Slava Fomin II

Otrzymuję the input device is not a TTYbłąd z tą metodą
Roy Shilkrot,

--interactiveMa zadbać o to, że jeśli nie jest, to nie jestem pewien, co się dzieje, bez szerszego kontekstu, w jaki używasz tego produktu.
zbrunson

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.