我如何与docker-compose一起传递参数

时间:2016-01-29 20:14:49

标签: docker docker-compose

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

  

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

9 个答案:

答案 0 :(得分:14)

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

用法很简单:

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

答案 1 :(得分:8)

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

testvar=test docker-compose up ...

export testvar=test
docker-compose up

答案 2 :(得分:3)

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

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

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

“docker-compose up”也没有任何争论。

答案 3 :(得分:2)

docker-compose不要包含任何标志或命令以传递参数。

撰写主要是用于运行服务而非构建图像的工具。 尝试使用每个dockerfile中定义的ARG作为参数。

它不可能支持每个独特的构建方案,因为docker-compose不是为此目的而设计的。你只能真正支持最常见的构建方案。

您可以查看有关其主题here的更多信息。

答案 4 :(得分:1)

您可以使用docker-compose build --build-arg app_env=production构建图像。然后,您可以使用docker-compose up。这将附加到生成的图像上。

# docker-compose.yml    
services:
      service_name:
        build:
          context: .
          args:
          - app_env=development
....


# Dockerfile
...
ARG app_env
ENV RACK_ENV $app_env
RUN if [ ${APP_ENV} = production ]; run command; else run another command; fi
...

然后在命令行中输入

docker-compose build --build-arg app_env=production
docker-compose up

答案 5 :(得分:1)

您需要确保两件事:

  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映像中。

答案 6 :(得分:1)

来自文档:

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

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

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

<svg> <path d="M 10,10 H 100 V 50 H 200 V 150 H 50 V 100 H 10 Z M 100,50 H 50 V 100 H 100 Z" fill="blue"/> </svg>

答案 7 :(得分:0)

不确定在这种情况下是否有帮助,但是您可以在docker-compose.yml脚本中指定命令;您可以为不同的服务名称提供不同的命令,例如

255

执行value * 255以启动容器,并使用以下命令将其附加到“服务”上:

colorbuffer[2] = Color.r <= 0.0f ? 0 : Color.r >= 1.0 ? 255 : (BYTE)(Color.r * 255);
colorbuffer[1] = Color.g <= 0.0f ? 0 : Color.g >= 1.0 ? 255 : (BYTE)(Color.g * 255);
colorbuffer[0] = Color.b <= 0.0f ? 0 : Color.b >= 1.0 ? 255 : (BYTE)(Color.b * 255);

答案 8 :(得分:0)

在处理构建argumenet时,请按照以下方式在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及更高版本。玩得开心