Saltar al contenido

Ejecutar dos comandos con docker exec

Es imprescindible comprender el código de forma correcta previamente a aplicarlo a tu proyecto si tdeseas aportar algo puedes comentarlo.

Solución:

En su primer ejemplo, usted está dando el -c bandera a docker exec. Esa es una respuesta fácil: docker exec no tiene una -c bandera.

En su segundo ejemplo, su shell está analizando esto en dos comandos antes de que Docker lo vea. Es equivalente a esto:

if docker exec [id] cd /var/www/project
then
    composer install
fi

Primero el docker exec se ejecuta, y si sale 0 (éxito), composer install intentará correr en la zonafuera de Docker.

Lo que debe hacer es pasar ambos comandos como un solo argumento para docker exec usando un string. Entonces no serán interpretados por una concha hasta que ya estén dentro del contenedor.

docker exec [id] "cd /var/www/project && composer install"

Sin embargo, como notó en los comentarios, esto tampoco funciona. Eso es porque cd es un shell incorporado y no existe por sí solo. Intentar ejecutarlo como el comando inicial fallará. Entonces, el siguiente paso es entregar esto a un shell para que lo ejecute.

docker exec [id] "bash -c 'cd /var/www/project && composer install'"

Y finalmente, en este punto el && se ha movido a un conjunto interno de comillas, por lo que realmente no necesitamos las comillas alrededor del bash comando… puedes soltarlos si lo prefieres.

docker exec [id] bash -c 'cd /var/www/project && composer install'

Todo después de la identificación del contenedor es el comando a ejecutar, por lo que en el primer ejemplo -c no es una opción para ejecutar, pero una ventana acoplable de comando intenta ejecutarse y falla porque ese comando no existe.

Lo más probable es que haya encontrado esta sintaxis de un docker run comando donde se estableció el punto de entrada /bin/sh. Sin embargo, exec omite el punto de entrada, por lo que debe incluir el comando completo para ejecutar. Como han señalado otros, ese comando incluye un shell como bash o, en el siguiente ejemplo, sh:

docker exec [id] /bin/sh -c 'cd /var/www/project && composer install'

Las otras respuestas están bien si desea ejecutar 2 comandos arbitrarios. Pero si el primer comando es simplemente cdentonces debes usar el -w opción para establecer el directorio de trabajo en su lugar.

docker exec -w dir container commands

Así que en tu ejemplo:

docker exec -w /var/www/project container composer install

Nos puedes añadir valor a nuestro contenido informacional añadiendo tu veteranía en las notas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *