Estou tentando executar vários comandos como este.
docker run image cd /path/to/somewhere && python a.py
Mas isso me dá o erro "Não existe esse arquivo ou diretório" porque é interpretado como ...
"docker run image cd /path/to/somewhere" && "python a.py"
Parece que são necessários alguns caracteres ESCAPE como "" ou ().
Então eu também tentei
docker run image "cd /path/to/somewhere && python a.py"
docker run image (cd /path/to/somewhere && python a.py)
mas estes não funcionaram.
Eu tenho procurado Docker Run referência , mas não encontrar qualquer dicas sobre caracteres de escape.
docker
docker-image
ai0307
fonte
fonte
docker run alpine sh -c "ls | wc >> xxx"
isso me ajuda muito quando o bash não está disponível.cd
, mas não para as coisas, onde os códigos de retorno importa;
não é o mesmo que&&
ver unix.stackexchange.com/questions/37069/...Você pode fazer isso de duas maneiras:
Use a opção -w para alterar o diretório de trabalho:
https://docs.docker.com/engine/reference/commandline/run/#set-working-directory--w
Passe o argumento inteiro para / bin / bash:
fonte
--workdir
no link fornecido. A página provavelmente foi movida / alterada. Pode ser atualizado para docs.docker.com/engine/reference/run/#workdir ou docs.docker.com/engine/reference/commandline/runVocê também pode canalizar comandos dentro do contêiner do Docker,
bash -c "<command1> | <command2>"
por exemplo:Mas, sem chamar o shell no controle remoto, a saída será redirecionada para o terminal local.
fonte
Se você deseja armazenar o resultado em um arquivo fora do contêiner, na máquina local, pode fazer algo assim.
O resultado dos seus comandos estará disponível
/tmp/result.txt
na sua máquina local.fonte
Para qualquer pessoa que veio aqui procurando fazer o mesmo com
docker-compose
você, basta adicionarbash -c
e incluir vários comandos entre aspas, unidos a&&
.Então, no exemplo dos OPs
docker-compose run image bash -c "cd /path/to/somewhere && python a.py"
fonte
docker-compose down [service-name]
não funcionar ou? (e não se preocupe, seja bem-vindo, prazer em ajudar :))Só para dar uma resposta adequada do comentário de @Eddy Hernandez e que é muito correto, pois o Alpine vem com cinzas e não com bash.
A pergunta agora se refere a Iniciar um shell no contêiner Docker Alpine, o que implica usar
sh
orash
ou/bin/sh
or/bin/ash/
.Com base na pergunta do OP:
docker run image sh -c "cd /path/to/somewhere && python a.py"
fonte
bash -c
funciona bem se os comandos que você está executando são relativamente simples. No entanto, se você estiver tentando executar uma longa série de comandos cheios de caracteres de controle, pode ficar complexo.Eu consegui contornar isso, canalizando meus comandos para o processo de fora, ou seja,
cat script.sh | docker run -i <image> /bin/bash
fonte