Windows docker passing ENV variable to CMD in Dockerfile not working
I have the following instructions in the Dockerfile
ENV DB_CONN_STRING="Data Source=DbServer;Initial Catalog=Db;User ID=sa;Password=p@ssw0rd"
ENTRYPOINT []
CMD ["powershell", "c:\\RunAll.ps1 -NewConnString", "$DB_CONN_STRING"]
When I run this command
docker run --rm -d -e DB_CONN_STRING="Test" test
DB_CONN_STRING is always empty inside RunAll.ps1. How to pass ENV to CMD?
When I use CMD without parameters
CMD ["powershell", "c:\\RunAll.ps1"]
everything works correctly.
RunAll.ps1 code:
param(
[string]$NewConnString = "Data Source=DbServer;Initial Catalog=db;User ID=sa;Password=p@ssw0rd"
)
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
I tried several approaches, exec and wrapper command styles, $ DB_CONN_STRING, $ {DB_CONN_STRING} and $ (DB_CONN_STRING) styles.
Tried suggestions from these posts:
Nothing works for me.
Here's an example from 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, build 60ccb22
source to share
The correct syntax for passing ENV to (in this case) ENTRYPOINT command would be
ENTRYPOINT powershell c:\RunAll.ps1 -NewConnString %DB_CONN_STRING%
So, you need to use the shell and window syntax format cmd.exe. The Exec syntax for ENTRYPOINT didn't work for me. And to pass a long string with spaces as a parameter, you will need to use double quotes like
docker.exe run -d --rm -e DB_CONN_STRING="'Data Source=DB2;Initial Catalog=Db;User ID=sa;Password=p@ssw0rd'"
source to share