【问题标题】:Docker - passing arguments - syntax issueDocker - 传递参数 - 语法问题
【发布时间】: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


    【解决方案1】:

    我一直在尝试更多。 似乎 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 值。

    运行回显“$Env:web_connection_string。”

    输出

    .

    【讨论】:

    • 这些都不起作用。无法通过 $Env:BuildArgName 访问构建参数。 ENV 也不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多