【发布时间】:2018-04-05 20:10:02
【问题描述】:
我想知道应该使用什么语法来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 错误?)
我将值作为参数传递给 setup.ps1 脚本的方式也是正确的语法吗?
【问题讨论】:
标签: docker docker-compose dockerfile docker-for-windows