【发布时间】:2015-12-16 21:41:36
【问题描述】:
Docker 1.9 允许将参数传递给 dockerfile。 见链接:https://docs.docker.com/engine/reference/builder/#arg
如何在 docker-compose.yml 中传递相同的参数?
如果可能,也请提供一个例子。
【问题讨论】:
标签: docker dockerfile docker-compose
Docker 1.9 允许将参数传递给 dockerfile。 见链接:https://docs.docker.com/engine/reference/builder/#arg
如何在 docker-compose.yml 中传递相同的参数?
如果可能,也请提供一个例子。
【问题讨论】:
标签: docker dockerfile docker-compose
现在docker-compose 支持变量替换。
Compose 使用运行 docker-compose 的 shell 环境中的变量值。例如,假设 shell 包含 POSTGRES_VERSION=9.3 并且您在 docker-compose.yml 文件中提供此配置:
db:
image: "postgres:${POSTGRES_VERSION}"
当您使用此配置运行 docker-compose up 时,Compose 会在 shell 中查找 POSTGRES_VERSION 环境变量并将其值代入其中。对于此示例,Compose 在运行配置之前将 image 解析为 postgres:9.3。
【讨论】:
docker-compose 不支持传递参数。
docker-compose run 传递参数,因为参数必须传递给多个容器。
docker-compose.yml 文件中将其设置为具有默认值的环境。 environment:\n PLATFORM_VERSION: "${PLATFORM_VERSION:-v1.0.0}"。 PS:\n 只是因为我找不到在 cmets 中格式化多行代码块的方法。
现在可以在 docker-compose v2+ 中作为build 对象的一部分来完成此操作;
docker-compose.yml
version: '2'
services:
my_image_name:
build:
context: . #current dir as build context
args:
var1: 1
var2: c
在上面的示例中,“var1”和“var2”将被发送到构建环境。
注意:任何与args 变量同名的环境变量(使用environment 块指定)都将覆盖该变量。
【讨论】:
args 键是否需要小写吗?我看到的文档和所有示例都使用小写键,但我没有看到任何提到它是必需的。
environment 块中的变量不会覆盖args 变量。只是args变量在容器构建过程期间可用,而environment变量在容器运行时可用。
Compose 文件格式 1.6 中添加了此功能。
参考:https://docs.docker.com/compose/compose-file/#args
services:
web:
build:
context: .
args:
FOO: foo
【讨论】:
docker-compose version 时,它显示的是 1.29.1,并且在撰写本文时,它是最新的。 1.6?
Compose file format(撰写),你指的是docker-compose,不同的东西。 1.6 现已弃用。这篇文章很老了:)
在这些答案中添加一些内容,args 仅在使用 docker-compose up --build 而不是在使用 docker-compose build 时被拾取。如果你想在不同的步骤中构建和运行,你需要使用docker-compose build --build-arg YOUR_ENV_VAR=${YOUR_ENV_VAR}或docker build --build-arg YOUR_ENV_VAR=${YOUR_ENV_VAR}
【讨论】:
在 Linux shell 上创建变量环境:
export TAG=0.1.2
在 docker-compose.yml 中设置变量
db:
image: "redis:${TAG}"
验证值是否被替换
docker-compose config
【讨论】: