【问题标题】:docker-compose args from shelldocker-compose 来自 shell 的 args
【发布时间】:2017-11-20 11:04:20
【问题描述】:

我想通过docker-compose 构建一个使用我的私钥克隆私有git 存储库的映像。

组成大致如下:

   myservice:
     build:
      context: .
      args:
        RSA:  ~/.ssh/id_rsa

以上都行不通,以下也行不通:

   myservice:
     build:
      context: .
      args:
        RSA: $(cat ~/.ssh/id_rsa)

docker build 命令可以正常工作,但格式为

docker build --build-args RSA=$(cat ~/.ssh/id_rsa) -t myservice:latest

【问题讨论】:

    标签: docker docker-compose dockerfile


    【解决方案1】:

    您可以在 docker-compose build 中使用相同的语法:

    docker-compose build --build-arg RSA="$(cat ~/.ssh/id_rsa)"
    

    不幸的是,您不能将 build-args 选项与 compose up 或 start...

    【讨论】:

    • 谢谢。与此同时,我求助于:export RSA=$(cat ~/.ssh/id_rsa) && docker-compose up --build,因为环境变量似乎可以工作。
    • 我认为是--build-arg(没有's')。此外,对于 docker-compose version =
    • 应该是docker-compose build --build-arg RSA="$(cat ~/.ssh/id_rsa)"
    【解决方案2】:

    在构建所有服务以及使用 up 时,一种可行的方法是将 SSH 密钥数据作为环境变量传递,如下所示:

    env RSA=$(cat ~/.ssh/id_rsa) docker-compose build
    

    然后你像这样在 compose 文件中设置构建参数:

    myservice:
     build:
      context: .
      args:
        RSA: |-
          ${RSA}
    

    【讨论】:

    • 谢谢。但是这个符号是什么意思:“| -”?你能告诉我如何在撰写文件中设置默认值吗?例如:args: RSA: ${RSA} 或“一些默认值如果为空”
    • “|”在 YAML 中,开始一个多行字符串,保留换行符,“-”表示字符串末尾的所有换行符都应该被条带化。检查yaml-multiline.info。对于默认值,语法为 ${VARIABLE:-default}(用于 2.1 组合文件格式)。检查docs.docker.com/compose/compose-file/#variable-substitution
    【解决方案3】:

    在你的 Dockerfile 中添加 ARGS 就像

    ARGS RSA

    在构建时读取它

    【讨论】:

    • 我添加了ARG 这就是docker build 命令有效的原因
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多