Dlaczego nie mogę wykonać cd do katalogu z uruchomionym dokerem?


39

Muszę uruchomić aplikację z określonego katalogu.

$ sudo docker run -P ubuntu/decomposer 'cd /local/deploy/decomposer; ./decomposer-4-15-2014'
2014/10/09 21:30:03 exec: "cd /local/deploy/decomposer; ./decomposer-4-15-2014": stat cd /local/deploy/decomposer; ./decomposer-4-15-2014: no such file or directory

Ten katalog na pewno istnieje, a jeśli połączę się z dokerem, uruchamiając interaktywnie bash, mogę uruchomić powyższe polecenie.

$ sudo docker run -i -t ubuntu/decomposer /bin/bash
# cd /local/deploy/decomposer; ./decomposer-4-15-2014

Mogę uruchomić mój program, podając pełną ścieżkę, ale następnie ulega awarii, ponieważ oczekuje się, że zostanie uruchomiony z bieżącego katalogu. Co mogę zrobić?

Odpowiedzi:


34

Przekaż swoje polecenie jako argument do / bin / sh w następujący sposób:

sudo docker run -P ubuntu/decomposer /bin/sh -c 'cd /local/deploy/decomposer; ./decomposer-4-15-2014'

docker uruchom centos / bin / sh -c 'cd / bin; / bin / ls 'nic nie drukuje, podczas gdy docker uruchamia centos / bin / sh -c' / bin / ls / bin '.
seanmcl

W rzeczywistości obie komendy wypisują listę plików w katalogu / bin. Próbowałem obu.
Glueon

Nie na moim pudełku, centos7.
seanmcl

1
Właściwie nawet usunięcie cudzysłowów wokół mojego polecenia do uruchomienia działało dobrze. Wydaje mi się, że doker i /bin/sh -ctak to zawija .
schmmd,

85

Możesz użyć -wopcji, aby zmienić katalog roboczy.

docker run

  -w, --workdir=""           Working directory inside the container

W twoim przypadku uruchomiłbyś:

sudo docker run -w /local/deploy/decomposer -P ubuntu/decomposer ./decomposer-4-15-2014

Czy mogę używać -wz docker exec? Szukam sposobu na uruchomienie skryptu python w moim kontenerze, ale nie mogę go zatrzymać poza kontenerem.
zx1986,

och, dostałem odpowiedź ....flag provided but not defined: -w
zx1986

1
Cholera, dlaczego ukrywa się to na dole strony referencyjnej uruchamiania dokera ! :-)
Amir Abiri,

5
To powinna być zaakceptowana odpowiedź
fferri,

4

Użyj WORKDIR w pliku Docker, aby ustawić katalog roboczy. Następnie możesz uruchomić polecenie za pomocą EXEC.


0

Może to wynikać z problemu z uprawnieniami lub instancja nie może znaleźć wykonywalnej dostępnej ścieżki. Aby to sprawdzić, dodaj ścieżkę do pliku wykonywalnego i spróbuj uruchomić skrypt

aby dodać bieżący katalog do ścieżki, użyj poniższej komendy

$ export PATH=$PATH:
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.