我想知道我应该使用什么语法来echo
传递给docker的ARG。
我还想知道语法,以便将ARG传递给powershell命令。这是我的尝试:
在我的dockerfile中,我定义了一个ARG:
FROM microsoft/aspnet
ARG web_connection_string
RUN echo " $web_connection_string."
ADD ./setup.ps1 /setup.ps1
RUN powershell -NoProfile -File C:\setup.ps1 -websiteDir "C:/inetpub/wwwroot" -webConnectionString $web_connection_string
setup.ps1如下所示:
param(
[Parameter(Mandatory = $true)]
[string]$websiteDir,
[Parameter(Mandatory = $true)]
[string]$webConnectionString
);
$sb = New-Object System.Data.Common.DbConnectionStringBuilder
$sb.set_ConnectionString($webConnectionString)
[xml]$config = Get-Content "$pathToWebConfig"
$config.configuration.connectionStrings.GetElementsByTagName("add") `
| Where-Object { $_.name -eq 'SiteSqlServer' } `
| ForEach-Object { $_.connectionString = $sb.ConnectionString; }
$config.Save("$websiteDir/web.config")
我的docker-compose.yml:
version: '3'
services:
web:
image: "dnn-site"
build:
context: .\
dockerfile: Dockerfile
args:
web_connection_string: 'Server=db;Database=${dnn_database_name};User ID=${dnn_database_user_name};Password=${dnn_database_user_password};'
您在此处使用$()语法看到的值位于与我运行docker-compose
命令的docker-compose.yml相同的目录中的“.env”文件中。 docker-compose
替换这些值。
当我docker-compose up
时,我看到了这个输出:
在输出中我看到:
Step 1/13 : FROM microsoft/aspnet
---> dc3f4d701ead
Step 2/13 : ARG web_connection_string
---> Using cache
---> 79fea0b34b8d
Step 3/13 : RUN echo " $web_connection_string."
---> Running in 7a3552cedc92
.
请注意,$ web_connection_string似乎是空的。这是由于我回应它的方式吗?或者它是空的(即我的docker-compose.yml是错误的?)
另外我将值作为param传递给setup.ps1脚本的方式是正确的语法吗?
答案 0 :(得分:0)
我一直在尝试更多。 似乎ARG传入Docker构建,可以使用:
在powershell中访问$Env:ARGNAME
例如:
FROM microsoft/aspnet
ARG web_connection_string
RUN echo " $Env:web_connection_string."
因此,调用powershell脚本并将其作为参数传递:
RUN powershell -NoProfile -File C:\setup.ps1 -myparameter $Env:web_connection_string
请注意,这似乎只适用于ARG。如果你使用这样的ENV值:
FROM microsoft/aspnet
ENV web_connection_string
您正在使用docker-compose.yml的environment
部分解析相关的环境值
web:
image: "dnn-web"
build:
context: .\
dockerfile: Dockerfile
environment:
web_connection_string: '${some_foo_from_dot_env_file}'
然后以下似乎不起作用,因为它似乎只适用于ARG值。
RUN echo" $ ENV:web_connection_string"
输出