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.