Docker: wie zum ausführen einer batch-Datei, wenn der container gestartet wird, und halten Sie die user in cmd / session

Ich bin mit Docker auf Windows-2016-Server TP4 mit einem Windows-container.

, Wenn der container gestartet wird, will ich führen eine bestimmte Initialisierungs-Skript (init.bat), sondern wollen auch, dass der angemeldete Benutzer, der in der container-Sitzung (in der cmd).

Mit diesem dockerfile:

FROM windowsservercore
ADD sources /init
ENTRYPOINT C:/init/init.bat

und das init.Fledermaus (die laufen soll im inneren des Behälters auf Start):

mkdir C:\myfolder
echo init end

und dieser Aufruf für die container:

docker run -it test/test cmd

der init.bat batch-Datei ausgeführt, dass die im container, aber der Benutzer nicht eingeloggt bleiben die container, aber der container beendet (mit exit-code 0).

Ich verstehe nicht ganz, warum er sich beendet. Wie verstehe ich die docker Dokumentation:

Wenn das Bild gibt auch einen ENTRYPOINT dann CMD oder COMMAND bekommen
angehängt als Argumente für die ENTRYPOINT.

den cmd Befehl erhalten sollten, die an die entrypoint, und das ist meine init-Skript, aber es funktioniert nicht.

Ich habe auch versucht diese syntax, aber es sieht nicht einen Unterschied machen.

ENTRYPOINT ["C:/init/init.bat"]

Wenn ich entfernen Sie die ENTRYPOINT aus dem dockerfile und starten Sie den Behälter mit der cmd Befehl, bleibe ich in der Sitzung, und ich kann natürlich laufen die init.bat-Skript manuell und es funktioniert, aber ich will es automatisch ausgeführt wird.

Wenn ich mit Ubuntu Container, ich verwende in der Regel supervisord auszuführen, die zu einer Initialisierung-Skripts, und bin/bash (die äquivalente zu cmd auf Windows) das Kommando.
Ich bin nicht sicher, wie Sie Sie tun das gleiche auf einem Windows-container, obwohl.

  • Sie können versuchen start /b cmd /k "docker run -it test/test cmd" in Ihrem batch-Datei
  • Ich habe gerade versucht dies und fügte hinzu, die Leitung zu meiner init.Fledermaus, aber es immer noch existiert. Dies ist die Ausgabe, wenn ich start ausführen der container: snag.gy/la4q3.jpg
  • Nur um klar zu sein: der init.bat wird ausgeführt, dass die im container, nicht außerhalb. (Nicht sicher, warum ich es nennen würde, "docker run" aus dem inneren der container. Aber ich denke, du meintest: start - /b cmd /k "c:\init\init.bat"). Jedenfalls habe ich beides ausprobiert, hat noch nicht gelingen. In der Regel, wenn ich mit Linux-Containern, die ich verwenden supervisord zu starten ein init-shell-Skript, und das bin/bash als Befehl. Aber nicht sicher sind, wie Sie tun es auf einem Windows-container jetzt.
Schreibe einen Kommentar