2017-10-02 4 views
0

Ich versuche interaktive Shell für ein Bild auszuführen, die ich mit Docker-Compose ausführen.Running Docker Interactive Shell

Ich versuchte Docker-run und Docker-exec

[email protected]:~$ sudo docker exec -it 235197ff4f0e /bin/bash 
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:262: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory" 

[email protected]:~$ sudo docker run -it drone/drone:0.7 /bin/bash 
No help topic for '/bin/bash' 

Der Versuch, SSH-Schlüssel innerhalb Drohne zu erzeugen, so dass ich aus privaten Repositories klonen.

+0

Die Antwort von @larks ist die richtige Antwort, aber ich wollte die Tatsache erweitern, dass Drohne Ihr Repository nicht innerhalb des 'Drohnen/Drohne'-Bildes klont. Daher hat das Hinzufügen eines SSH-Schlüssels zum "Drone/Drone" -Bild keine Auswirkungen. Stattdessen sollten Sie Drohnengeheimnisse verwenden (siehe offizielle Dokumente), um einen geheimen Schlüssel in Ihrem Repository zu registrieren, mit dem Sie dann private Git + SSH-Repositorys zur Laufzeit klonen können. Oder verwenden Sie git + https, um Abhängigkeiten zu klonen, die in der Regel von der Drohne mit keiner Konfiguration unterstützt werden. –

Antwort

4

Hier laufen mehrere Dinge ab. Ich mag einen Blick auf dem zweiten Fehler zuerst nehmen:

Das drone/drone Bild ist so konfiguriert, um automatisch den /drone Befehl ausführen (die Sie über docker inspect und die Suche nach den Entrypoint Schlüsseln bestimmen können). Also, wenn Sie laufen:

docker run drone/drone:0.7 help 

Sie am Ende läuft, im Inneren des Behälters:

drone help 

Und natürlich, wenn Sie laufen:

docker run drone/drone:0.7 /bin/bash 

Sie führen, in dem Behälter :

drone /bin/bash 

Daher die Fehlermeldung, die Sie sind seeing ("Kein Hilfethema für '/ bin/bash'"), weil Sie eine nicht erkannte Option an den Befehl drone übergeben.


Der erste Fehler ist viel einfacher. Ihre Fehlermeldung lautet:

exec: \"/bin/bash\": stat /bin/bash: no such file or directory 

Das scheint ziemlich klar. Es gibt keine /bin/bash. In der Tat, wenn Sie den Inhalt des Bildes überprüfen, werden Sie sehen, dass es nur ein minimales Dateisystem gibt. Der einfachste Weg zu suchen ist durch einen Container starten, dann docker export verwendet wird, wie folgt aus:

$ docker run drone/drone:0.7 help 
[...output doesn't matter...] 
$ docker export $(docker ps -lq) | tar tf - 

Welche Sie zeigt:

.dockerenv 
dev/ 
dev/console 
dev/pts/ 
dev/shm/ 
drone 
etc/ 
etc/hostname 
etc/hosts 
etc/mtab 
etc/resolv.conf 
etc/ssl/ 
etc/ssl/certs/ 
etc/ssl/certs/ca-certificates.crt 
proc/ 
sys/ 

Es gibt keine /bin/bash, keine ssh, keine git, etc, so dass Sie Ich werde mit deinem derzeitigen Plan nicht viel Glück haben. Sie sollten möglicherweise in Erwägung ziehen, die Remote-Repositorys auf Ihrem Host zu klonen und sie anschließend mit einem Host-Volume-Mount (-v /host/path:/container path) Ihrem Container auszusetzen oder ein benutzerdefiniertes Image zu erstellen, das die benötigten Tools enthält.

+0

Diese Antwort ist genau richtig. Beachten Sie, dass es ein "Drohne/Drohne: 0.8-alpines" Bild gibt, das verwendet werden kann, wenn eine Shell zum Debuggen benötigt wird. –