【问题标题】:How do I pass an argument along with docker-compose up?如何将参数与 docker-compose up 一起传递?
【发布时间】:2016-01-29 20:14:49
【问题描述】:

我有一个docker-compose.yml 文件,在终端中我是typing docker-compose up [something],但我还想将一个参数传递给docker-compose.yml。这可能吗?我已阅读有关插值变量的信息,并尝试使用 ${testval}docker-compose up [something] var="test".yml 文件中指定一个变量,但我收到以下错误:

警告:未设置 testval 变量。默认为空字符串。
错误:没有这样的服务:testval=test

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    基于dnephin answer,我创建了这个sample repo,您可以将变量传递给docker-compose up。

    用法很简单:

    MAC / LINUX
    • TEST= docker-compose up 创建并启动 appdb 容器。然后,该 api 应该在端口 3030 上的 docker 守护程序上运行。
    • TEST=DO docker-compose up 创建并启动 appdb 容器。 api 应该在package.json 文件中执行npm run test
    WINDOWS (Powershell)
    • $env:TEST="";docker-compose up 创建并启动 appdb 容器。然后,该 api 应该在端口 3030 上的 docker 守护程序上运行。
    • $env:TEST="do";docker-compose up 创建并启动 appdb 容器。 api 应该在package.json 文件中执行npm run test

    【讨论】:

      【解决方案2】:

      你需要确保两件事:

      1. docker-compose.yml 声明了环境变量。例如,
      services:
          app:
              image: python3.7
              environment:
                  - "SECRET_KEY=${SECRET_KEY}"
      
      1. 在调用docker-compose up 时让变量在环境中可用:
      SECRET_KEY="not a secret" docker-compose up
      

      请注意,这并不等同于在构建期间传递它们,因为不建议将机密存储在 docker 映像中。

      【讨论】:

      • 注意终端环境变量。它们可能会替换从 docker-compose 传递给 dockerfile 的一些参数,并在构建期间导致意外的参数变量
      【解决方案3】:

      您需要将变量作为环境变量传递:

      testvar=test docker-compose up ...
      

      export testvar=test
      docker-compose up
      

      【讨论】:

      • 这不是我们想要的。即使在环境部分的作曲家文件中设置,主机环境值也不会复制到容器中。如果必须设置构建变量,则必须使用 Composer 文件的构建部分。我会在回复中发布
      • 对你的回答很有帮助!
      【解决方案4】:

      我不确定您想在这里做什么,但如果您需要将环境变量传递给特定容器 docker-compose.yml 允许您这样做:

      web:
        ...
        environment:
          - RAILS_ENV=production
          - VIRTUAL_HOST=www.example.com
          - VIRTUAL_PORT=3011
      

      此变量将特定于您指定它们的容器,并且不会在容器之间共享。

      “docker-compose up”也不接受任何参数。

      【讨论】:

        【解决方案5】:

        在处理构建参数时,请在 compose yml 文件中声明它们,如下所示

        services:
          app: (name of service
            build:
              context: docker/app/ (where is your docker build root)
              dockerfile: Dockerfile (that is optional)
              args:
                - COMPOSER_AUTH_TOKEN (name of variable, value will be taken from host environment)
        

        在运行 docker-compose up 之前,按照其他人的建议导出变量。它会起作用的。我试过。使用 docker compose 版本 3 及更高版本。玩得开心

        【讨论】:

          【解决方案6】:

          来自文档:

          https://docs.docker.com/compose/reference/up/

          https://docs.docker.com/compose/reference/build/

          您不能将参数传递给 docker-compose up,但可以将参数传递给 docker-compose build:

          docker-compose build --build-arg KEY1=VALUE1 --build-arg KEY2=VALUE2

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-08-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-12-18
            相关资源
            最近更新 更多