Cómo ejecutar 2 comandos con Docker Exec


84

Necesito ejecutar 2 comandos con docker exec. Estoy copiando un archivo del contenedor de la ventana acoplable y no quiero tener que lidiar con las credenciales para usar algo como ssh. Este comando copia un archivo:

sudo docker exec boring_hawking tar -cv /var/log/file.log | tar -x

Pero crea un subdirectorio var / log, quiero evitar eso, así que si pudiera hacer esto en el contenedor de la ventana acoplable, debería ser bueno:

cd /var/log ; tar -cv ./file.log

¿Cómo puedo hacer que Docker Exec ejecute 2 comandos?

Respuestas:


136

Esto llevó a la respuesta: carácter de escape en la línea de comando de Docker Terminé haciendo esto:

sudo docker exec boring_hawking bash -c 'cd /var/log ; tar -cv ./file.log' | tar -x

Entonces funciona, más o menos, ejecutando el comando bash con un parámetro que son los 2 comandos que quiero ejecutar.


Muchas gracias, esto me ayuda mucho
dicho

Si tiene comillas dobles dentro del comando, puede hacerlo -c "cd /var/log; tar -cv \"$1\""si el archivo está en el parámetro 1.
zed

27

Muy a menudo, la necesidad de varios comandos es cambiar el directorio de trabajo, como en la pregunta del OP.

Para eso, Docker ahora tiene una -wopción para especificar el directorio de trabajo. Por ejemplo, en el presente caso

docker exec -w /var/log boring_hawking tar -cv ./file.log

Realmente útil, este es el camino a seguir.
TortelliEngineer

¡Esto es exactamente lo que estaba buscando!
Clay Mitchell

11

Para cualquier otra persona que se encuentre con esto y quiera una forma diferente de especificar varios comandos para ejecutar un script más complejo:

cat <<EOF | docker exec --interactive boring_hawking sh
cd /var/log
tar -cv ./file.log
EOF

Esta es una solución legible muy agradable cuando desea ejecutar un script más complejo. Se merece más votos
positivos

the input device is not a TTY
Recibo

Se --interactivesupone que se ocupará de eso, si ese no es el caso, entonces no estoy seguro de lo que está sucediendo sin tener un contexto más amplio sobre cómo está usando esto.
zbrunson

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.