remove - download docker image
la ventana acoplable ejecuta<IMAGE><MULTIPLE COMMANDS> (5)
Para cualquier otra persona que vino aquí que busca hacer lo mismo con
docker-compose
, solo necesita anteponer
bash -c
e incluir múltiples comandos entre comillas, unidos junto con
&&
.
Entonces, en el ejemplo de OPs,
docker-compose run image bash -c "cd /path/to/somewhere && python a.py"
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 ().
Entonces también 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 he encontrado ninguna pista sobre los caracteres ESCAPE.
Para ejecutar varios comandos en docker, use
/bin/bash -c
y punto y coma
;
docker run image_name /bin/bash -c "cd /path/to/somewhere; python a.py"
En caso de que necesitemos que se ejecute command2 (python) si y solo si command1 (cd) devolvió el estado de salida cero (sin error), use
&&
lugar de
;
docker run image_name /bin/bash -c "cd /path/to/somewhere && python a.py"
Puedes hacer esto de dos maneras:
-
Use 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"
Si desea almacenar el resultado en un archivo fuera del contenedor, en su máquina local, puede hacer algo como esto.
RES_FILE=$(readlink -f /tmp/result.txt)
docker run --rm -v ${RES_FILE}:/result.txt img bash -c "cat /etc/passwd | grep root > /result.txt"
El resultado de sus comandos estará disponible en
/tmp/result.txt
en su máquina local.
También puede 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 se redirigirá al terminal local.