ventana acoplable ejecuta <IMAGEN> <COMANDOS MÚLTIPLES>

Resuelto ai0307 asked hace 9 años • 10 respuestas

Estoy intentando 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 lo intenté

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 encontré ninguna pista sobre los caracteres ESCAPE.

ai0307 avatar Feb 13 '15 08:02 ai0307
Aceptado

Para ejecutar múltiples comandos en la ventana acoplable, use /bin/bash -cun punto y coma;

docker run image_name /bin/bash -c "cd /path/to/somewhere; python a.py"

En caso de que necesitemos que el comando2 (python) se ejecute si y solo si el comando1 (cd) devolvió el estado de salida cero (sin error), use &&en lugar de;

docker run image_name /bin/bash -c "cd /path/to/somewhere && python a.py"
anhlc avatar Feb 13 '2015 01:02 anhlc

Puedes hacer esto de dos maneras:

  1. Utilice la opción -w para cambiar el directorio de trabajo:

    -w, --workdir="" Directorio de trabajo dentro del contenedor

    https://docs.docker.com/engine/reference/commandline/run/#set-working-directory--w

  2. Pase el argumento completo a /bin/bash:

    docker run image /bin/bash -c "cd /path/to/somewhere; python a.py"
    
John Petrone avatar Feb 13 '2015 17:02 John Petrone

También puedes canalizar comandos dentro del contenedor Docker, bash -c "<command1> | <command2>"por ejemplo:

docker run img /bin/bash -c "ls -1 | wc -l"

Pero, sin invocar el shell en el control remoto, la salida será redirigida a la terminal local.

USER_1 avatar Jan 05 '2017 16:01 USER_1

bash -cFunciona bien si los comandos que estás ejecutando son relativamente simples. Sin embargo, si intentas ejecutar una larga serie de comandos llenos de caracteres de control, puede resultar complejo.

Lo solucioné exitosamente canalizando mis comandos al proceso desde el exterior, es decir

cat script.sh | docker run -i <image> /bin/bash

user2966041 avatar Apr 20 '2020 10:04 user2966041