ventana acoplable ejecuta <IMAGEN> <COMANDOS MÚLTIPLES>
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.
Para ejecutar múltiples comandos en la ventana acoplable, use /bin/bash -c
un 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"
Puedes hacer esto de dos maneras:
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
Pase el argumento completo a /bin/bash:
docker run image /bin/bash -c "cd /path/to/somewhere; python a.py"
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.
bash -c
Funciona 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