需求:想将.net framework的程序用docker容器跑起来,这个程序是后端数据存储用的是sqlserver,程序连接数据库方式是采用写死在setup.ini配置文件的连接字符串方式。现在先采用灵活点的环境变量传数据库连接字符串方式传进去
问题点:
1.docker run -e dbstring="" 连接字符串里有& , ; 要怎么进行转义
2.如何将dbstring环境变量的值带进去容器,在容器中可以获得dbstring的值。
解决:
1.windows docker 的转义要用^,不是linux docker容器用\ 转义
PS C:\Users\Administrator> docker run -d -it -p 80:80 -e dbstring="DBConnectstring=Server^&192.168.1.11^,1433^;initial catalog^&test^;User Id^&sa^;Password^&123456^;" --name testenv test:env
2.在容器中获取环境变量的值,使用方法是在Dockerfile里ENTRYPOINT 上执行echo 变量>> /Setup.inf追加到Setup.ini配置文件里,之前试过RUN echo %dbstring% >> /Setup.inf。但是只会添加 %dbstring%到Setup.ini,并不是变量的值,必须在ENTRYPOINT 上加这个命令才能做到读取到变量的值,将变量的值追加到Setup.ini配置文件上。
另外一个踩过的坑是,记得windows docker的Dockerfile读取变量的值是用%变量%,两个百分号%的方式,不是linux docker 使用美元$的方式读取值。