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.cdpero 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
--workdiren 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.txten su máquina local.fuente
Para cualquier otra persona que vino aquí que busca hacer lo mismo con
docker-composeusted, solo necesita anteponerbash -cy 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
shoasho/bin/sho/bin/ash/.Basado en la pregunta del OP:
docker run image sh -c "cd /path/to/somewhere && python a.py"fuente
bash -cfunciona 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/bashfuente