Wie kann ich CMD beim Ausführen eines Docker-Images überschreiben?

Wie kann ich CMD beim Ausführen eines Docker-Images überschreiben?

Ich möchte ein Docker-Image überprüfen, das von jemand anderem erstellt wurde und für das sowohl ein Einstiegspunkt als auch ein Befehl angegeben wurden, zum Beispiel:

ENTRYPOINT ["/usr/sbin/apache2ctl"]
CMD ["-D", "FOREGROUND"]

Derzeit mache ich:

docker run --interactive --tty --entrypoint=/bin/bash $IMAGE --login

Gibt es eine Möglichkeit, CMD so zu überschreiben, dass es leer ist (damit ich nicht „--login“ verwenden muss)?

Antwort1

Sie können einfach „via“ eingeben docker run -it --entrypoint=/bin/bash $IMAGE -i(Sie starten einen neuen Container aus dem Image und erhalten eine Bash-Shell im interaktiven Modus) und dann den Entrypoint-Befehl in diesem Container ausführen.

Sie können dann den laufenden Container in dem Zustand überprüfen, in dem er ausgeführt werden sollte.

BEARBEITEN: Seit Docker 1.3 können Sie execeinen Prozess in einem laufenden Container ausführen. Starten Sie Ihren Container wie gewohnt und rufen Sie ihn dann mit folgendem Befehl auf:

docker exec -it $CONTAINER_ID /bin/bash

Vorausgesetzt, Bash ist installiert, erhalten Sie Shell-Zugriff auf den laufenden Container.

Antwort2

Sehen:https://docs.docker.com/engine/reference/run/#overriding-dockerfile-image-defaults

Relevanter Teil:

CMD (Standardbefehl oder -optionen) Rufen Sie den optionalen BEFEHL in der Docker-Befehlszeile ab:

$ docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

Dieser Befehl ist optional, da die Person, die das IMAGE erstellt hat, möglicherweise bereits einen Standardbefehl mit dem Dockerfile-CMD angegeben hat. Als Operator (die Person, die einen Container aus dem Image ausführt) können Sie diesen CMD überschreiben, indem Sie einfach einen neuen BEFEHL angeben.

Wenn das Bild auch einen ENTRYPOINT angibt, werden CMD oder COMMAND als Argumente an den ENTRYPOINT angehängt.

Um das zu tun, was Sie wollen, brauchen SienurGeben Sie einen Befehl an und überschreiben Sie ihn mit /bin/bash. Nicht ganz „leer“, aber es erledigt die Arbeit zu 99 %.

Antwort3

Für alle, die hierher kommen, um Einstiegspunkt UND Befehl zu überschreiben, um einen anderen Befehl zu übergeben, z. B. Bash anstelle des Einstiegspunktskripts ausführen und dann einen anderen Befehl mit Parametern ausführen (war mir aus anderen Antworten nicht klar):

 docker run [other options] --entrypoint '/bin/sh' $IMAGE -c 'npm link gulp gulp-sass gulp-sourcemaps'

-c 'npm link ...'ist ein Parameter für /bin/sh, daher können Sie hier jeden Befehl übergeben, den Sie im Container ausführen möchten. /bin/shist für Alpine-Bilder, /bin/bashhöchstwahrscheinlich für andere Bilder.

verwandte Informationen