webentwicklung-frage-antwort-db.com.de

Starten einer Shell im Docker Alpine Container

Um eine interaktive Shell für das Ubuntu-Image zu starten, können wir Folgendes ausführen:

[email protected]:~$ docker run -it --rm ubuntu
[email protected]:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

Wenn dies jedoch für Alpine Docker-Image ausgeführt wird, ergeben sich folgende Ergebnisse:

[email protected]:~$ docker run -it --rm Alpine
Error response from daemon: No command specified

Was ist der Befehl zum Starten einer interaktiven Shell in einem alpinen Basiscontainer?

119
Ole
[email protected]:~$ docker run -it --rm Alpine /bin/ash
(inside container) / # 

Oben verwendete Optionen:

  • /bin/ash ist Ash ( Almquist Shell ) von BusyBox
  • --rm Container beim Verlassen automatisch entfernen (docker run --help)
  • -i Interaktiver Modus (STDIN offen lassen, auch wenn keine Verbindung besteht)
  • -t Pseudo-TTY zuweisen
212
Ole

Normalerweise enthält ein Alpine Linux-Image nicht bash. Stattdessen können Sie /bin/ash, /bin/sh, ash oder nur sh.

/ bin/ash

docker run -it --rm Alpine /bin/ash

/ bin/sh

docker run -it --rm Alpine /bin/sh

asche

docker run -it --rm Alpine ash

sch

docker run -it --rm Alpine sh

Ich hoffe, diese Informationen helfen Ihnen weiter.

54
jansanchez

Heutzutage booten Alpine-Images standardmäßig direkt in /bin/sh, Ohne dass eine Shell angegeben werden muss, die ausgeführt werden soll:

$ Sudo docker run -it --rm Alpine  
/ # echo $0  
/bin/sh  

Dies liegt daran, dass die Alpine -Dockerdateien jetzt einen CMD -Befehl enthalten, der die Shell angibt, die ausgeführt werden soll, wenn der Container gestartet wird: CMD ["/bin/sh"].

In älteren Alpine-Bildversionen (vor 2017) wurde der Befehl CMD nicht verwendet, da Docker eine zusätzliche Ebene für CMD erstellte, wodurch die Bildgröße anstieg. Dies wollten die alpinen Bildentwickler vermeiden. In neueren Docker-Versionen (1.10+) belegt CMD keine Ebene mehr und wurde daher Alpine Bildern hinzugefügt. Solange CMD nicht überschrieben wird, werden aktuelle Alpine-Images daher mit /bin/sh Gestartet.

Weitere Informationen finden Sie in den folgenden Verpflichtungserklärungen zu den offiziellen Alpine Docker-Dateien von Glider Labs:
https://github.com/gliderlabs/docker-Alpine/commit/ddc19dd95ceb3584ced58be0b8d7e9169d04c7a3#diff-db3dfdee92c17cf53a96578d4900cb5b

12
valiano