Próbuję uruchomić tak wiele poleceń MULTIPLE.
docker run image cd /path/to/somewhere && python a.py
Ale to daje mi błąd „Brak takiego pliku lub katalogu”, ponieważ jest interpretowany jako ...
"docker run image cd /path/to/somewhere" && "python a.py"
Wygląda na to, że niektóre znaki ESCAPE, takie jak „” lub (), są potrzebne.
Więc 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 te nie działały.
Szukałem Docker Run Reference, ale nie znalazłem żadnych wskazówek na temat znaków ESCAPE.
docker
docker-image
ai0307
źródło
źródło
docker run alpine sh -c "ls | wc >> xxx"
bardzo mi to pomaga, gdy bash nie jest dostępny.cd
ale nie w przypadku rzeczy, w których kody powrotne mają znaczenie,;
to nie to samo, co&&
patrz unix.stackexchange.com/questions/37069/...Możesz to zrobić na kilka sposobów:
Użyj opcji -w, aby zmienić katalog roboczy:
https://docs.docker.com/engine/reference/commandline/run/#set-working-directory--w
Przekaż cały argument do / bin / bash:
źródło
--workdir
podanym linku. Strona prawdopodobnie została przeniesiona / zmieniona. Można zaktualizować do docs.docker.com/engine/reference/run/#workdir lub docs.docker.com/engine/reference/commandline/runMożesz także potokować polecenia wewnątrz kontenera Docker,
bash -c "<command1> | <command2>"
na przykład:Ale bez wywoływania powłoki w pilocie dane wyjściowe zostaną przekierowane do lokalnego terminala.
źródło
Jeśli chcesz zapisać wynik w jednym pliku poza kontenerem, na komputerze lokalnym, możesz zrobić coś takiego.
Rezultat twoich poleceń będzie dostępny
/tmp/result.txt
na twoim komputerze lokalnym.źródło
Dla każdego, kto tu przyszedł i chce zrobić to samo z
docker-compose
tobą, wystarczybash -c
dołączyć i dołączyć wiele poleceń w cudzysłowie, połączone razem&&
.Tak więc w przykładzie PO
docker-compose run image bash -c "cd /path/to/somewhere && python a.py"
źródło
docker-compose down [service-name]
nie działać lub? (i nie martw się, nie ma za co, chętnie pomożemy :))Wystarczy odpowiedzieć na komentarz @Eddy Hernandez i jest to bardzo poprawne, ponieważ Alpine ma popioły, a nie bash.
Pytanie dotyczy teraz Uruchamiania powłoki w alpejskim pojemniku Docker, co oznacza użycie
sh
lubash
lub/bin/sh
lub/bin/ash/
.Na podstawie pytania PO:
docker run image sh -c "cd /path/to/somewhere && python a.py"
źródło
bash -c
działa dobrze, jeśli uruchomione polecenia są stosunkowo proste. Jednak jeśli próbujesz uruchomić długą serię poleceń pełną znaków kontrolnych, może się to skomplikować.Udało mi się to obejść, przesyłając moje polecenia do procesu z zewnątrz, tj
cat script.sh | docker run -i <image> /bin/bash
źródło