it-swarm.com.de

Wie kann ich Docker-Container am Laufen halten?

Ich möchte mehrere Container automatisch ausführen und etwas erstellen,

einige Bilder, z. B. ein Schwarm, werden jedoch nach dem Ausführen oder Starten automatisch angehalten.

Ich versuche es schon so

docker run -d swarm

docker run -d swarm /bin/bash tail -f /dev/null

docker run -itd swarm bash -c "while true; do sleep 1; done"

'docker ps' zeigt jedoch nichts und ich habe versucht, Dockerfile zu erstellen, indem ich Folgendes eingebe:

FROM swarm
ENTRYPOINT ["echo"]

und Das Bild wird nicht mit Fehlermeldung ausgeführt:

docker: Error response from daemon: invalid header field value "oci runtime error: container_linux.go:247: starting container process caused \"exec: \\\"echo\\\": executable file not found in $PATH\"\n".

Ich kann diesen Fehler nicht verstehen ... Wie kann ich den Schwarmcontainer am Laufen halten?

(Entschuldigung, mein Englisch ist nicht gut))

5
haeney

Zunächst einmal möchten Sie die Schalter -i und -d nicht mischen. Entweder möchten Sie den Container im interaktiven oder separaten Modus ausführen. In Ihrem Fall im getrennten Modus:

docker run -d swarm /bin/bash tail -f /dev/null

Es ist auch nicht erforderlich, ein tty mit dem Flag -t zuzuweisen, da dies nur im interaktiven Modus erfolgen muss.

Sie sollten einen Blick auf die Docker run reference werfen.

6
Cyclonecode

es wird empfohlen, -d zu verwenden, da Sie den Container mit nur einem Befehl ausführen können und das Terminal des Containers nicht durch Drücken von Strg + P + Q getrennt werden muss.

Es besteht jedoch ein Problem mit der Option -d. Ihr Container stoppt sofort es sei denn, die Befehle werden nicht im Vordergrund ausgeführt. Docker setzt voraus, dass Ihr Befehl weiterhin im Vordergrund ausgeführt wird. Andernfalls wird davon ausgegangen, dass Ihre Anwendungen den Container stoppen und herunterfahren.

Das Problem ist, dass einige Anwendungen nicht im Vordergrund ausgeführt werden.

In dieser Situation können Sie tail -f/dev/null zu Ihrem Befehl hinzufügen. __ Wenn Sie den Hauptbefehl im Hintergrund ausführen, wird der Container nicht angehalten, da tail nicht weiter ausgeführt wird im Vordergrund.

Dockerlauf -d Schwarmendstück -f/dev/null

docker ps zeigt den Container

Jetzt können Sie Ihren Container mit dem Befehl docker exec container_name anhängen

oder 

docker run -d swarm Befehl end -f/dev/null

5
Navin a.s

Es ist gut, einen Schwanz von/dev/null zu machen, aber warum sollte er nicht etwas Nützliches tun?

Mit dem folgenden Befehl werden verwaiste Prozesse geerntet, sodass keine Zombie-Protokolle (nicht mehr funktionsfähig) herumliegen. Auch einige init.d/restart-Skripte erlauben dies nicht.

exec sh -c 'while true ;do wait ;done'
0
TheMadsen

Im Grunde ist dies die Methode, aber Ihr Docker-Image ist ein Schwarm, also ist es anders, und ich weiß nichts über Swarm Docker-Image, und ich verwende das nicht. Aber nachdem ich darüber nachgeforscht habe. Zuerst starte ich das Docker-Schwarmbild, das es zeigt.,

enter image description here

Danach verstehe ich, dass wir Docker Swarm Image ausführen, indem wir nur fünf Befehle in dem Bild verwenden, z. B. Erstellen, Listen verwalten, beitreten, Hilfe. Wenn wir ein Swarm-Image ohne Befehl ausführen, wie Docker Run -itd Swarm, wird der Befehl als --help verwendet. Entschuldigung, aber ich weiß nicht, was der Zweck des Schwarmbildes ist. Weitere Informationen finden Sie unter https://hub.docker.com/_/swarm/

Die Antwort, die ich hinzugefügt habe: docker run -itd image tail -f/dev/null ist nicht für ein Schwarmbild, sondern für Dockerbilder wie Ubuntu, Fedora, Centos.

Lesen Sie einfach die Verwendung des Schwarmbildes und warum es verwendet wird.

Wenn Sie ein Problem haben, posten Sie Ihr Problem in https://github.com/docker/swarm-library-image/issues

Danke dir...

0
Navin a.s

Sie haben Recht docker run -itd swarm (Ohne Argument für container (bash -c "solange wahr; Schlaf 1; fertig")) funktioniert einwandfrei. Wenn Sie Argument für Docker-Lauf übergeben, wird der Befehl und ausgeführt beendet den Container. Wenn Sie den Container dauerhaft ausführen möchten, starten Sie den Container zunächst mit docker run -itd swarm und prüfen Sie, ob der Container ausgeführt wird oder nicht. Mit docker ps jetzt läuft der Container, wenn Sie möchten Führen Sie einen beliebigen Befehl in container aus. use docker exec -itd container_name command Remember: Verwenden Sie nur den Befehl, der den Container nicht anhält. bash -c "while true; sleep 1; done Mit diesem Befehl wird der Container angehalten (Da dies ein vollständiger Befehl ist, wenn er in einem normalen Terminal ausgeführt und ausgeführt wird, beendet dieser Befehlstyp auch den Container).

Ich hoffe das hilft..

0
Navin a.s