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.

Author: mohan08p, 2015-02-13

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"
 269
Author: anhlc,
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:

  1. 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

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

    docker run image /bin/bash -c "cd /path/to/somewhere; python a.py"
    
 22
Author: John Petrone,
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.

 4
Author: USER_1,
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.

 0
Author: Flamarion,
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