2016-03-24 2 views
2

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.

+0

Sie können versuchen, 'Start/b cmd/k "Docker Lauf -IT-Test/Test cmd"' in Ihrem Batch-Datei –

+0

@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 –

+0

@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. –

Antwort

2

anstelle des ENTRYPOINT können Sie versuchen, so etwas wie dies in Ihrem Dockerfile setzen:

CMD C:\init\init.bat && cmd

+0

Perfekt, das funktioniert! Beachten Sie, dass ich jedoch einen Windows-Container habe, also sollte es sein: 'CMD C: \ init \ init.bat && cmd'.Ich habe deine Antwort diesbezüglich bearbeitet. Danke für die Hilfe! –

+0

das funktioniert nicht für mich ... irgendjemand könnte etwas denken? Gibt es ein Protokoll, das ich mir ansehen könnte? – sebagomez

Verwandte Themen