In Ihrem ersten Beispiel geben Sie die -c
Flagge an docker exec
. Das ist eine einfache Antwort: docker exec
hat kein -c
Flag.
In Ihrem zweiten Beispiel analysiert Ihre Shell dies in zwei Befehle, bevor Docker es überhaupt sieht. Es entspricht dies:
if docker exec [id] cd /var/www/project
then
composer install
fi
Zuerst wird die docker exec
ausgeführt wird, und wenn es 0 (Erfolg) verlässt, composer install
werden versuchen lokal, außerhalb von Docker zu laufen.
Sie müssen beide Befehle als einzelnes Argument an docker exec
mit einer Zeichenfolge übergeben. Dann werden sie von einer Shell erst im Container interpretiert.
docker exec [id] "cd /var/www/project && composer install"
Wie Sie jedoch in den Kommentaren angemerkt haben, funktioniert dies auch nicht. Das liegt daran, dass cd
eine integrierte Shell ist und nicht für sich allein existiert. Der Versuch, den Befehl als ersten Befehl auszuführen, schlägt fehl. Der nächste Schritt besteht also darin, dies einer Shell zur Ausführung zu übergeben.
docker exec [id] "bash -c 'cd /var/www/project && composer install'"
Und schließlich, an dieser Stelle die &&
hat sich zu einem inneren Satz von Anführungszeichen bewegt, so dass wir nicht wirklich brauchen die Anführungszeichen um den bash
Befehl ... Sie können sie löschen, wenn Sie es vorziehen.
docker exec [id] bash -c 'cd /var/www/project && composer install'
Haben Sie versucht: 'Docker exec [id]/bin/bash -c cd‘/var/www/project && composer install'' –
danke, dude, ich habe deinen Kommentar nicht gesehen, aber es hat funktioniert! –