Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

632
Visualizações
Ejecutar dos comandos con docker exec

Estoy tratando de hacer dos comandos en docker exec. Concretamente, tengo que ejecutar un comando dentro de un directorio específico. Intenté esto, pero no funcionó:

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

El parámetro -c no se detecta. También probé esto:

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

Pero el comando composer install se ejecuta después del comando docker exec . ¿Cómo puedo hacerlo?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

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

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, se ejecuta docker exec , y si sale de 0 (éxito), la composer install intentará ejecutarse localmente , fuera de Docker.

Lo que debe hacer es pasar ambos comandos como un solo argumento a docker exec usando una cadena. 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. Esto se debe a que cd es un shell integrado 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, && se ha movido a un conjunto interno de comillas, por lo que realmente no necesitamos las comillas alrededor del comando bash ... puede quitarlas si lo prefiere.

 docker exec [id] bash -c 'cd /var/www/project && composer install'
over 4 years ago · Santiago Trujillo Relatório

0

Todo lo que se encuentra 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 en un comando de docker run donde el punto de entrada se configuró en /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'
over 4 years ago · Santiago Trujillo Relatório

0

Las otras respuestas están bien si desea ejecutar 2 comandos arbitrarios. Pero si el primer comando es simplemente cd , entonces debería usar la opción -w para configurar el directorio de trabajo.

 docker exec -w {dir} {container} {commands}

Así que en tu ejemplo:

 docker exec -w /var/www/project {container} composer install
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda