wake-up-neo.com

Verlassen mit Code 0 Docker

Ich versuche, Container mit Docker-Compose-Diensten zu starten. Aber leider Container mit Code 0 verlassen. Containers wird dank eines Repository erstellt, das aus einem .tar.gz-Archiv stammt. Dieses Archiv ist eine Centos-VM.

Ich möchte 6 Container aus demselben Archiv erstellen. Anstatt 6-mal den Befehl docker einzugeben, möchte ich eine Datei docker-compose.yml erstellen, in der ich den Befehl und das Tag zusammenfassen kann.

Ich habe begonnen, docker-compose.yml-Datei zu schreiben, nur um einen Container zu erstellen.

Hier ist meine docker-compose.yml:

version: '2'
services:
  dvpt:
   image: compose:test.1
   container_name: cubop1
   command: mkdir /root/essai/
   tty: true

Achten Sie nicht auf den Befehl, da ich nur einen angeben muss.

Meine Frage lautet also: warum wird der Container beendet? Gibt es eine andere Lösung, um diese Container gleichzeitig zu bauen?

Vielen Dank für Ihre Antworten.

13
Sylvain M.J.

Die Antwort ist eigentlich der erste Kommentar. Ich werde Miguels Kommentar ein wenig erklären.

Zunächst müssen wir verstehen, dass ein Docker-Container einen einzelnen Befehl ausführt. Der Container wird so lange ausgeführt, wie dieser Prozess ausgeführt wird, den der Befehl gestartet hat. Sobald der Vorgang abgeschlossen und beendet ist, stoppt der Container.

Mit diesem Verständnis können wir davon ausgehen, was in Ihrem Fall passiert. Wenn Sie den Dienst dvpt starten, wird der Befehl mkdir /root/essai/ Ausgeführt. Dieser Befehl erstellt den Ordner und wird dann beendet. Zu diesem Zeitpunkt wird der Docker-Container gestoppt, da der Prozess beendet wurde (mit dem Status 0, der angibt, dass mkdir ohne Fehler abgeschlossen wurde).

23
Andy Shinn

Sie können mit einem Befehl wie tail -f/dev/null enden

Es funktioniert oft in meiner docker-compose.yml mit

command: tail -f /dev/null

Und es ist leicht zu sehen, wie ich den Container am Laufen halte.

docker ps

2
shgnInc

Eine Lösung besteht darin, einen Prozess zu erstellen, der nicht endet, eine Endlosschleife oder etwas, das kontinuierlich im Hintergrund ausgeführt werden kann. Dadurch bleibt der Container geöffnet, da der Prozess nicht beendet wird.

Dies ist jedoch ein Hack. Ich bin immer noch auf der Suche nach einer besseren Lösung.

Das Zend Server Image macht so etwas. In ihrem .sh-Skript haben sie einen endgültigen Befehl:

exec /usr/local/bin/nothing

Welche führt eine Datei, die kontinuierlich im Hintergrund ausgeführt wird. Ich habe versucht, den Dateiinhalt hierher zu kopieren, aber er muss binär sein.

BEARBEITEN: Sie können Ihre Datei auch mit /bin/bash Beenden, wodurch ein neuer Terminalprozess im Container gestartet und das Schließen verhindert wird.

2
Knight