Я пытаюсь запустить несколько команд, как это.
docker run image cd /path/to/somewhere && python a.py
Но это дает мне ошибку «Нет такого файла или каталога», потому что это интерпретируется как ...
"docker run image cd /path/to/somewhere" && "python a.py"
Кажется, что необходимы некоторые символы ESCAPE, такие как "" или ().
Так я тоже попробовал
docker run image "cd /path/to/somewhere && python a.py"
docker run image (cd /path/to/somewhere && python a.py)
но это не сработало.
Я искал Справочник по Docker Run, но не нашел никаких подсказок о ESCAPE символах.
docker
docker-image
ai0307
источник
источник
docker run alpine sh -c "ls | wc >> xxx"
это мне очень помогает, когда bash недоступен.cd
но не для вещей, где значения кодов возврата;
не такие, как&&
см. Unix.stackexchange.com/questions/37069/…Вы можете сделать это несколькими способами:
Используйте параметр -w, чтобы изменить рабочий каталог:
https://docs.docker.com/engine/reference/commandline/run/#set-working-directory--w
Передайте весь аргумент в / bin / bash:
источник
--workdir
в предоставленной ссылке. Страница, вероятно, переместилась / изменилась. Может быть обновлен до docs.docker.com/engine/reference/run/#workdir или docs.docker.com/engine/reference/commandline/runВы также можете передать команды внутри контейнера Docker,
bash -c "<command1> | <command2>"
например:Но без вызова оболочки в пульте выход будет перенаправлен на локальный терминал.
источник
Если вы хотите сохранить результат в одном файле вне контейнера на локальном компьютере, вы можете сделать что-то вроде этого.
Результат ваших команд будет доступен
/tmp/result.txt
на вашем локальном компьютере.источник
Для тех, кто пришел сюда и хочет сделать то же самое с
docker-compose
вами, вам нужно просто добавитьbash -c
и заключить несколько команд в кавычки, соединенные вместе&&
.Так в примере ОП
docker-compose run image bash -c "cd /path/to/somewhere && python a.py"
источник
docker-compose down [service-name]
не работает или? (и не беспокойтесь, добро пожаловать, с радостью помогу :))Просто чтобы сделать правильный ответ из комментария @Eddy Hernandez, и это очень правильно, поскольку Alpine идет с пеплом, а не с ударом.
Теперь вопрос касается запуска оболочки в контейнере Docker Alpine, который подразумевает использование
sh
илиash
или/bin/sh
или/bin/ash/
.На основании вопроса ОП:
docker run image sh -c "cd /path/to/somewhere && python a.py"
источник
bash -c
хорошо работает, если команды, которые вы запускаете, относительно просты. Однако, если вы пытаетесь запустить длинную серию команд, заполненных управляющими символами, это может стать сложным.Я успешно справился с этим путем подачи своих команд в процесс извне, т.е.
cat script.sh | docker run -i <image> /bin/bash
источник