2017-03-27 5 views
2

funktioniert Ich habe die folgenden Anweisungen in DockerfileDocker für Windows ENV Variable in Dockerfile CMD nicht vorbei

ENV DB_CONN_STRING="Data Source=DbServer;Initial Catalog=Db;User ID=sa;[email protected]" 
ENTRYPOINT [] 
CMD ["powershell", "c:\\RunAll.ps1 -NewConnString", "$DB_CONN_STRING"] 

Wenn ich diesen Befehl ausführen

docker run --rm -d -e DB_CONN_STRING="Test" test 

DB_CONN_STRING immer leer innen RunAll ist. PS1. Wie kann ich ENV an CMD übergeben?

Wenn ich CMD verwenden, ohne Parameter

CMD ["powershell", "c:\\RunAll.ps1"] 

alle korrekt funktioniert.

RunAll.ps1 Code:

param(
    [string]$NewConnString = "Data Source=DbServer;Initial Catalog=db;User ID=sa;[email protected]" 
) 

New-Item "C:\start_log.txt" -type file -force -value $NewConnString 
.\ChangeConnString.ps1 -NewConnString $NewConnString 
New-Item "C:\end_log.txt" -type file -force -value $NewConnString 

# Run IIS container entry point 
.\ServiceMonitor.exe w3svc 

ich mehrere Ansätze, exec und Shell-Befehl Stile versucht, $ DB_CONN_STRING, $ {DB_CONN_STRING} und $ (DB_CONN_STRING) Stile.

Versuchte Vorschläge dieser Beiträge:

Nichts für mich funktioniert. Hier

ist ein Beispiel von Docker log:

[16:06:34.505][WindowsDockerDaemon][Info ] time="2017-03-27T16:06:34.505376100+02:00" level=debug msg="HCSShim::Container::CreateProcess id=0909937ce1130047b124acd7a5eb57664e05c6af7cbb446aa7c8015a44393232 config={\"ApplicationName\":\"\",\"CommandLine\":\"powershell c:\\\\RunAll.ps1 -NewConnString $DB_CONN_STRING\",\"User\":\"\",\"WorkingDirectory\":\"C:\\\\\",\"Environment\":{\"DB_CONN_STRING\":\"Test\"},\"EmulateConsole\":false,\"CreateStdInPipe\":true,\"CreateStdOutPipe\":true,\"CreateStdErrPipe\":true,\"ConsoleSize\":[0,0]} 

Docker Version 17.03.0-ce, bauen 60ccb22

+0

Per Docker Einleitungen, CMD Kommando-Shell und damit Umgebungsvariable nicht sein wird, nicht für die Extraktion zur Verfügung aufrufen. https://docs.docker.com/engine/reference/builder/#cmd Sie sollten wahrscheinlich erwägen, zu "ENTRYPOINT" anstatt –

+0

zu wechseln. Ich habe es auch mit ENTRYPOINT versucht. Übrigens, damit begonnen: ENTRYPOINT ["Powershell", "c: \\ RunAll.ps1", "-NewConnString", "$ {DB_CONN_STRING}"]. Hatte das gleiche Ergebnis, wechselte dann zu CMD. auch wie dieser versucht: SHELL [ "Powershell"] ENTRYPOINT c: \ RunAll.ps1 -NewConnString CMD [ "$ DB_CONN_STRING"] – Vladimir

+0

arbeitet Below für mich Docker ' # Flucht file =' von Microsoft/windowsservercore Kopie hello.ps1 c: \ ENTRYPOINT powershell.exe c: \ Hallo.ps1 ' hallo.ps1 ist 'Write-Output 'Umgebungsvariable ist" + (dir env:) ' Ich kann einen Lauf unten erstellen und sehe, dass die Umgebungsvariable vorhanden ist ' docker run --rm me/me -e "test = lala" ' –

Antwort

1

Die korrekte Syntax für die Weitergabe ENV (in diesem Fall) ENTRYPOINT Befehl wird

ENTRYPOINT powershell c:\RunAll.ps1 -NewConnString %DB_CONN_STRING% 

So müssen Sie die Shell Syntax und Fenster cmd.exe Parameter Format verwenden. Exec Syntax von ENTRYPOINT hat nicht für mich gearbeitet. Und lange Zeichenfolge mit Leerzeichen als Parameter zu übergeben Sie doppelt verschiedene Anführungszeichen verwenden müssen, zum Beispiel

docker.exe run -d --rm -e DB_CONN_STRING="'Data Source=DB2;Initial Catalog=Db;User ID=sa;[email protected]'" 
Verwandte Themen