Ich benutze Docker auf Windows 2016 Server TP4 mit einem Windows-Container.Docker: Wie führe ich eine Batch-Datei aus, wenn der Container startet und belasse den Benutzer in cmd/session
Wenn der Container gestartet wird, möchte ich ein bestimmtes Initialisierungsskript (init.bat) ausführen, möchte aber den Benutzer bei der Container-Sitzung (in cmd) angemeldet lassen.
Mit diesem dockerfile:
FROM windowsservercore
ADD sources /init
ENTRYPOINT C:/init/init.bat
und dieser init.bat (die angeblich im Inneren des Behälters beim Start ausgeführt wird):
mkdir C:\myfolder
echo init end
und dieser Startaufruf für den Container:
die init.bat Batch-Datei wird Wird innerhalb des Containers ausgeführt, der Benutzer bleibt jedoch nicht im Container angemeldet, sondern der Container wird beendet (mit Exit-Code 0).
Ich verstehe nicht ganz, warum es endet. Von wie ich verstehe die docker documentation:
Wenn auch das Bild ein ENTRYPOINT gibt dann das CMD oder COMMAND bekommen als Argumente an die ENTRYPOINT angehängt.
Der Befehl cmd
sollte an den Eingangspunkt angehängt werden, was mein Init-Skript ist, aber nicht.
Ich habe auch diese Syntax versucht, aber es macht keinen Unterschied.
ENTRYPOINT ["C:/init/init.bat"]
Wenn ich die ENTRYPOINT aus dem dockerfile entfernen und den Behälter mit dem cmd
Befehl starten, ich bleibe in der Session und ich kann das init.bat Skript manuell natürlich laufen und es funktioniert, aber ich mag es automatisch ausgeführt werden.
Wenn ich mit Ubuntu-Containern arbeite, verwende ich normalerweise supervisord
, um irgendwelche Initialisierungsskripte auszuführen, und bin/bash (das entspricht cmd
unter Windows) als Befehl. Ich bin mir nicht sicher, wie man das gleiche für einen Windows-Container tut.
Sie können versuchen, 'Start/b cmd/k "Docker Lauf -IT-Test/Test cmd"' in Ihrem Batch-Datei –
@DennisvanGils Ich habe es gerade versucht und die Zeile zu meiner init.bat hinzugefügt, aber es wird immer noch ausgeführt. Dies ist die Ausgabe, wenn ich den Container starten: http://snag.gy/la4q3.jpg –
@DennisvanGils Nur um es klar zu machen: Die init.bat wird innerhalb des Containers ausgeführt, nicht außerhalb. (Ich bin mir nicht sicher, warum ich "docker run" aus dem Container aufrufen würde. Aber ich glaube, du meintest: start/b cmd/k "c: \ init \ init.bat"). Jedenfalls habe ich beides versucht, war noch nicht erfolgreich. Wenn ich mit Linux-Containern arbeite, benutze ich normalerweise supervisord, um ein init-Shell-Skript zu starten, und bin/bash als Befehl. Aber nicht sicher, wie es jetzt in einem Windows-Container zu tun ist. –