Starten einer Shell im Docker Alpine Container


164

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

ole@T:~$ docker run -it --rm ubuntu
root@1a6721e1fb64:/# 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 das Alpine Docker-Image ausgeführt wird , führt dies zu folgenden Ergebnissen:

ole@T:~$ 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?

Antworten:


280
ole@T:~$ docker run -it --rm alpine /bin/ash
(inside container) / # 

Oben verwendete Optionen:

  • /bin/ashist Ash ( Almquist Shell ) von BusyBox
  • --rmEntfernen Sie den Container automatisch, wenn er beendet wird ( docker run --help)
  • -i Interaktiver Modus (STDIN offen halten, auch wenn nicht angeschlossen)
  • -t Ordnen Sie eine Pseudo-TTY zu

1
Sicher - gute Idee - Asche ist die Schale und --rm entfernt den Behälter nach Abschluss des Laufs. Wenn Sie also möchten, dass der Container nach dem Ausführen noch verfügbar ist, überspringen Sie die Verwendung von --rm. Ich benutze es, da ich nur mit Geldautomaten experimentiere.
— Ole

Wie kann man es dann mit einer Eigenschaft wie Ubuntu ausführen?
— Benyamin Limanto

Ich glaube in beiden Fällen ... Ubuntu oder Alpine ... geben Sie ihm einfach eine -dOption.
— Ole

2
+1 für die Feststellung, dass Alpine hat ashund nicht bash, was mich, da ich mit Alpine nicht sehr vertraut bin, dazu gebracht hat, früher auf den Container zuzugreifen.
— code_dredd

Wenn Sie auf RHEL sind und die Berechtigung verweigert Fehler erhalten, ist es wieder SELinux ... muss diese Setenforce 0 vorübergehend tun: P
— Parth Patel

67

Üblicherweise wird ein Alpine Linux - Image enthält nicht bash, stattdessen können Sie verwenden /bin/ash, /bin/sh, ashoder 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.


1
Was ist der Unterschied zwischen /bin/ashund ash? Ähnliches gilt für /bin/shund sh.
— Peter Mortensen

1
Hallo @ peter-mortensen, der Unterschied ist, dass ashnur eine symbolische Verbindung zu ist /bin/ash. Einige Linux-Distributionen haben keine symbolischen Links.
— jansanchez

28

Heutzutage werden alpine Images /bin/shstandardmäßig direkt gestartet, ohne dass eine Shell zum Ausführen angegeben werden muss:

$ sudo docker run -it --rm alpine  
/ # echo $0  
/bin/sh  

Dies ist seit dem alpineCMD , dass Image-Docker-Dateien jetzt einen Befehl enthalten , der die Shell angibt, die ausgeführt werden soll, wenn der Container gestartet wird : CMD ["/bin/sh"].

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

Weitere Informationen finden Sie im folgenden Commit für die offiziellen Alpine Dockerfiles von Glider Labs:
https://github.com/gliderlabs/docker-alpine/commit/ddc19dd95ceb3584ced58be0b8d7e9169d04c7a3#diff-db3dfdee92c17cf9cf


4

Falls der Container bereits läuft:

docker exec -it container_id_or_name ash
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.