Estoy tratando de ejecutar MÚLTIPLES comandos como este.
docker run image cd /path/to/somewhere && python a.py
Pero esto me da el error "No existe tal archivo o directorio" porque se interpreta como ...
"docker run image cd /path/to/somewhere" && "python a.py"
Parece que se necesitan algunos caracteres ESCAPE como "" o ().
Así que también probé
docker run image "cd /path/to/somewhere && python a.py"
docker run image (cd /path/to/somewhere && python a.py)
Pero estos no funcionaron.
He buscado Docker Run Reference pero no he encontrado ninguna pista sobre los caracteres ESCAPE.
docker
docker-image
ai0307
fuente
fuente
docker run alpine sh -c "ls | wc >> xxx"
esto me ayuda mucho, cuando bash no está disponible.cd
pero no para cosas en las que los códigos de retorno importan;
no es lo mismo que&&
ver unix.stackexchange.com/questions/37069/…Puedes hacer esto de dos maneras:
Use la opción -w para cambiar el directorio de trabajo:
https://docs.docker.com/engine/reference/commandline/run/#set-working-directory--w
Pase el argumento completo a / bin / bash:
fuente
--workdir
en el enlace proporcionado. La página probablemente se ha movido / cambiado. Podría actualizarse a docs.docker.com/engine/reference/run/#workdir o docs.docker.com/engine/reference/commandline/runTambién puede canalizar comandos dentro del contenedor Docker,
bash -c "<command1> | <command2>"
por ejemplo:Pero, sin invocar el shell en el control remoto, la salida se redirigirá al terminal local.
fuente
Si desea almacenar el resultado en un archivo fuera del contenedor, en su máquina local, puede hacer algo como esto.
El resultado de sus comandos estará disponible
/tmp/result.txt
en su máquina local.fuente
Para cualquier otra persona que vino aquí que busca hacer lo mismo con
docker-compose
usted, solo necesita anteponerbash -c
y encerrar múltiples comandos entre comillas, junto con&&
.Entonces, en el ejemplo de los OP
docker-compose run image bash -c "cd /path/to/somewhere && python a.py"
fuente
docker-compose down [service-name]
que no funcione o? (y no le preocupa nada, feliz de ayuda :))Solo para hacer una respuesta adecuada del comentario de @Eddy Hernández y que es muy correcto ya que Alpine viene con cenizas, no bash.
La pregunta ahora se refiere a Iniciar un shell en el contenedor Docker Alpine que implica usar
sh
oash
o/bin/sh
o/bin/ash/
.Basado en la pregunta del OP:
docker run image sh -c "cd /path/to/somewhere && python a.py"
fuente
bash -c
funciona bien si los comandos que está ejecutando son relativamente simples. Sin embargo, si está intentando ejecutar una larga serie de comandos llenos de caracteres de control, puede volverse complejo.Lo solucioné con éxito conectando mis comandos al proceso desde el exterior, es decir
cat script.sh | docker run -i <image> /bin/bash
fuente