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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
statt der ENTRYPOINT Sie können versuchen Sie etwas wie dies in Ihrer Dockerfile:
CMD C:\init\init.bat && cmd
CMD C:\init\init.bat && cmd
. Bearbeitet ich Ihre Antwort im Bezug auf das. Vielen Dank für die Hilfe!Habe ich einen ähnlichen Fall. Hier ist meine dockerfile
Funktioniert das nicht. Der container bleibt aber der Ordner wird nicht erstellt.
In der Erwägung, dass, wenn ich das Gegenteil tun :
---- das funktioniert. Der container bleibt bis und der Ordner ist erstellt.