2015-02-13 9 views
100

Próbuję uruchomić wiele poleceń w ten sposób.uruchomić dokowanie <IMAGE><WIELE KOMEND>

docker run image cd /path/to/somewhere && python a.py 

Ale to daje mi „Nie ma takiego pliku lub katalogu” błąd, ponieważ jest on interpretowany jako ...

"docker run image cd /path/to/somewhere" && "python a.py" 

Wydaje się, że kilka znaków specjalnych, takich jak „” lub() są potrzebne.

Więc ja też próbowałem

docker run image "cd /path/to/somewhere && python a.py" 
docker run image (cd /path/to/somewhere && python a.py) 

ale to nie działa.

Szukałem Docker Run Reference, ale nie znalazłem żadnych wskazówek dotyczących znaków ESCAPE.

Odpowiedz

198

Aby uruchomić wiele poleceń w dokowanym użyć /bin/bash -c i średnik ;

docker run image /bin/bash -c "cd /path/to/somewhere; python a.py" 
+0

Dziękuję za podpowiedź! Po prostu wypróbowałem [obraz dokowania "cd/bin; ls"] i otrzymałem następujące komunikaty o błędach. [exec: "cd/bin; ls": stat cd/bin; ls: brak takiego pliku lub katalogu] [Odpowiedź błędu od daemona: Nie można uruchomić kontenera] – ai0307

+0

Każdy może znaleźć odpowiedź na pytanie, jak używać tutaj dokumentów do wysyłania poleceń do kontenera: [tutaj jest moja odpowiedź na inne pytanie podobne do tego tutaj dokumenty, możesz to sprawdzić] (http://stackoverflow.com/a/35767573/433835). –

+6

'doker uruchomić alpejski sh -c" ls | xx >> "to bardzo mi pomogło, gdy bash nie jest dostępny. –

19

Można to zrobić na kilka sposobów:

  1. Użyj opcji -w, aby zmienić katalog roboczy:

    -w, --workdir = "" Katalog roboczy wewnątrz kontenera

    https://docs.docker.com/engine/reference/commandline/run/#set-working-directory--w

  2. Przepuścić całego argumentu/bin/bash

    docker run image /bin/bash -c "cd /path/to/somewhere; python a.py" 
    
+0

Dziękuję za pomoc! To naprawdę mi pomaga. – ai0307

+0

Brak wzmianki o '--workdir' w podanym łączu. Prawdopodobnie strona została przesunięta/zmieniona. Można go zaktualizować do https://docs.docker.com/engine/reference/run/#workdir lub https://docs.docker.com/engine/reference/commandline/run/ – marcv

1

Można także polecenia wewnętrznej rury Doker pojemnika, bash -c "<command1> | <command2>" np

docker run img /bin/bash -c "ls -1 | wc -l" 

Ale bez wywoływania powłoki w zdalne wyjście zostanie przekierowane do lokalnego terminala.

Powiązane problemy