GNU/Linux >> Tutoriels Linux >  >> Linux

Exécuter deux commandes avec docker exec

Dans votre premier exemple, vous donnez le -c indicateur à docker exec . C'est une réponse facile :docker exec n'a pas de -c drapeau.

Dans votre deuxième exemple, votre shell analyse cela en deux commandes avant même que Docker ne le voie. Cela équivaut à ceci :

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

Tout d'abord, le docker exec est exécuté, et s'il sort 0 (succès), composer install va essayer de s'exécuter localement , en dehors de Docker.

Ce que vous devez faire est de passer les deux commandes en tant qu'argument unique à docker exec à l'aide d'une chaîne. Ensuite, ils ne seront pas interprétés par un shell tant qu'ils ne seront pas déjà à l'intérieur du conteneur.

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

Cependant, comme vous l'avez noté dans les commentaires, cela ne fonctionne pas non plus. C'est parce que cd est un shell intégré et n'existe pas en soi. Essayer de l'exécuter en tant que commande initiale échouera. La prochaine étape consiste donc à transmettre cela à un shell pour qu'il l'exécute.

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

Et enfin, à ce stade, le && est passé à un ensemble interne de guillemets, nous n'avons donc pas vraiment besoin des guillemets autour du bash commande... vous pouvez les supprimer si vous préférez.

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

Tout après l'identifiant du conteneur est la commande à exécuter, donc dans le premier exemple -c n'est pas une option pour exec, mais un docker de commande essaie de s'exécuter et échoue car cette commande n'existe pas.

Vous avez très probablement trouvé cette syntaxe à partir d'un docker run commande où le point d'entrée était défini sur /bin/sh . Cependant, exec contourne le point d'entrée, vous devez donc inclure la commande complète à exécuter. Comme d'autres l'ont souligné, cette commande inclut un shell comme bash ou dans l'exemple ci-dessous, sh :

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

Linux
  1. Qu'est-ce que Git Bash ? Travailler avec les commandes Git Bash

  2. Quelques commandes DOCKER

  3. Exécuter une ligne de commandes avec One Sudo ?

  4. Exécuter la commande Nohup avec entrée ?

  5. Commandes Docker suspendues sans réponse

Docker Exec :votre commande Goto pour exécuter des commandes dans Docker

40 commandes Docker importantes pour les développeurs de logiciels

Gérer le saut de ligne avec les commandes Fold et FMT dans le terminal Linux

Comment déployer CouchDB en tant que cluster avec Docker

Installer WordPress avec Docker sur Ubuntu 20.04

Commande Linux exec avec exemples