ejecutar docker
Estoy tratando de ejecutar VARIOS comandos como este.
docker run image cd /path/to/somewhere && python a.py
Pero esto me da" No hay tal archivo o directorio " error porque se interpreta como...
"docker run image cd /path/to/somewhere" && "python a.py"
Parece que se necesitan algunos caracteres de ESCAPE como "" o ().
Así que 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 de ESCAPE.
4 answers
Para ejecutar varios comandos en docker, use /bin/bash -c
y punto y coma ;
docker run image /bin/bash -c "cd /path/to/somewhere; python a.py"
En caso de que necesitemos que command2 (python) se ejecute si y solo si command1 (cd) devuelve cero (sin error) estado de salida, use &&
en lugar de ;
docker run image /bin/bash -c "cd /path/to/somewhere && python a.py"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-31 23:22:45
Puedes hacer esto de un par de maneras:
-
Utilice la opción-w para cambiar el directorio de trabajo:
- w, work workdir="" Directorio de trabajo dentro del contenedor
Https://docs.docker.com/engine/reference/commandline/run/#set-working-directory--w
-
Pase todo el argumento a / bin / bash:
docker run image /bin/bash -c "cd /path/to/somewhere; python a.py"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-17 11:02:46
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 remoto, la salida será redirigida al terminal local.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-14 16:12:38
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.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-02 15:51:14