GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Führen Sie zwei Befehle mit docker exec aus

In Ihrem ersten Beispiel geben Sie den -c an Flag auf docker exec . Das ist eine einfache Antwort:docker exec hat keinen -c Flagge.

In Ihrem zweiten Beispiel zerlegt Ihre Shell dies in zwei Befehle, bevor Docker es überhaupt sieht. Es ist äquivalent zu:

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

Zuerst die docker exec ausgeführt wird, und wenn es 0 (Erfolg) beendet, composer install wird versuchen, lokal ausgeführt zu werden , außerhalb von Docker.

Was Sie tun müssen, ist, beide Befehle als einzelnes Argument an docker exec zu übergeben mit einer Zeichenfolge. Dann werden sie von einer Shell erst interpretiert, wenn sie sich bereits im Container befinden.

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

Wie Sie in den Kommentaren angemerkt haben, funktioniert dies jedoch auch nicht. Das liegt daran, dass cd ist eine eingebaute Shell und existiert nicht alleine. Der Versuch, es als ursprünglichen Befehl auszuführen, schlägt fehl. Der nächste Schritt besteht also darin, dies zur Ausführung an eine Shell zu übergeben.

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

Und schließlich an dieser Stelle die && wurde in einen inneren Satz von Anführungszeichen verschoben, sodass wir die Anführungszeichen um die bash nicht wirklich brauchen Befehl ... Sie können sie löschen, wenn Sie möchten.

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

Alles nach der Container-ID ist der auszuführende Befehl, also im ersten Beispiel -c ist keine Option zum Ausführen, aber ein Befehls-Docker versucht auszuführen und schlägt fehl, da dieser Befehl nicht existiert.

Höchstwahrscheinlich haben Sie diese Syntax von einem docker run gefunden Befehl, bei dem der Einstiegspunkt auf /bin/sh gesetzt wurde . exec umgeht jedoch den Einstiegspunkt, sodass Sie den vollständigen Befehl zum Ausführen einfügen müssen. Wie andere bereits angemerkt haben, enthält dieser Befehl eine Shell wie bash oder im Beispiel unten sh:

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

Linux
  1. Was ist Git Bash? Arbeiten mit Git Bash-Befehlen

  2. Einige DOCKER-Befehle

  3. Eine Reihe von Befehlen mit einem Sudo ausführen?

  4. Nohup-Befehl mit Eingabe ausführen?

  5. Docker-Befehle hängen ohne Antwort

Docker Exec:Ihr Goto-Befehl zum Ausführen von Befehlen in Docker

40 wichtige Docker-Befehle für Softwareentwickler

Behandeln Sie den Zeilenumbruch mit Fold- und FMT-Befehlen im Linux-Terminal

So stellen Sie CouchDB als Cluster mit Docker bereit

Installieren Sie WordPress mit Docker auf Ubuntu 20.04

Linux-exec-Befehl mit Beispielen