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

+3


source to share


1 answer


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'"

      

+1


source







All Articles