I have the following instructions in 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 can I pass ENV to CMD?
When I use CMD without parameters
CMD ["powershell", "c:\\RunAll.ps1"]
all 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 shell command styles, $DB_CONN_STRING, ${DB_CONN_STRING} and $(DB_CONN_STRING) styles.
Tried suggestions from these posts:
Use docker run command to pass arguments to CMD in Dockerfile
How do I use Docker environment variable in ENTRYPOINT array?
Nothing works for me.
Here is 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
The correct syntax for passing ENV to (in this case) ENTRYPOINT command will be
ENTRYPOINT powershell c:\RunAll.ps1 -NewConnString %DB_CONN_STRING%
So, you need to use the shell syntax and windows cmd.exe parameters format. Exec syntax of ENTRYPOINT haven't worked for me. And to pass long string with spaces as parameter you will need to use double different quotes, for example
docker.exe run -d --rm -e DB_CONN_STRING="'Data Source=DB2;Initial Catalog=Db;User ID=sa;Password=p@ssw0rd'"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With