我希望能够在docker-compose中使用env变量。Yml,在docker-compose up时传入的值。这就是例子。
今天我使用的是基本的docker run命令,该命令包含在我自己的脚本中。 有没有一种方法来实现它与撰写,没有任何这样的bash包装?
proxy:
hostname: $hostname
volumes:
- /mnt/data/logs/$hostname:/logs
- /mnt/data/$hostname:/data
我希望能够在docker-compose中使用env变量。Yml,在docker-compose up时传入的值。这就是例子。
今天我使用的是基本的docker run命令,该命令包含在我自己的脚本中。 有没有一种方法来实现它与撰写,没有任何这样的bash包装?
proxy:
hostname: $hostname
volumes:
- /mnt/data/logs/$hostname:/logs
- /mnt/data/$hostname:/data
当前回答
只关注环境变量的默认值和强制值的问题,并更新@modulito的答案:
在docker-compose中使用默认值和强制强制值。现在支持Yml文件(来自docs):
同时支持$VARIABLE和${VARIABLE}语法。此外,当使用2.1文件格式时,可以使用典型的shell语法提供内联默认值: 如果环境中的VARIABLE未设置或为空,${VARIABLE:-default}计算为默认值。 ${VARIABLE-default}只有在环境中未设置VARIABLE时才计算为默认值。
类似地,下面的语法允许你指定强制变量: ${变量:?如果环境中的VARIABLE未设置或为空,则err}退出,并显示包含err的错误消息。 ${变量?如果在环境中未设置VARIABLE,则err}退出,并显示包含err的错误消息。
其他扩展的shell样式的特性,如${VARIABLE/foo/bar},是不支持的。
其他回答
要添加一个env变量,你可以定义一个env_file(让我们称之为var.env):
ENV_A=A
ENV_B=B
并将其添加到docker组合清单服务。此外,您可以直接使用environment定义env变量。
例如在docker-compose.yaml中:
version: '3.8'
services:
myservice:
build:
context: .
dockerfile: ./docker/Dockerfile.myservice
image: myself/myservice
env_file:
- ./var.env
environment:
- VAR_C=C
- VAR_D=D
volumes:
- $HOME/myfolder:/myfolder
ports:
- "5000:5000"
更多最新信息请点击这里:https://docs.docker.com/compose/environment-variables/
你不能……然而。但这是另一种选择,像码头作曲家一样思考。yml发电机:
https://gist.github.com/Vad1mo/9ab63f28239515d4dafd
基本上是一个替换变量的shell脚本。你也可以使用Grunt任务在CI进程结束时构建docker合成文件。
env SOME_VAR="I am some var" OTHER_VAR="I am other var" docker stack deploy -c docker-compose.yml
使用3.6版本:
version: "3.6"
services:
one:
image: "nginx:alpine"
environment:
foo: "bar"
SOME_VAR:
baz: "${OTHER_VAR}"
labels:
some-label: "$SOME_VAR"
two:
image: "nginx:alpine"
environment:
hello: "world"
world: "${SOME_VAR}"
labels:
some-label: "$OTHER_VAR"
我从这个链接得到的 https://github.com/docker/cli/issues/939
就像这样简单:
使用文档中提到的命令行:
docker-compose --env-file ./config/.env.dev config
或者使用.env文件,我认为这是最简单的方法:
web:
env_file:
- web-variables.env
带样本的文件
当为卷使用环境变量时,您需要:
在包含docker-compose的文件夹中创建.env文件。yaml文件 在.env文件中声明变量: 主机名= your_hostname 在docker-compose中将$hostname修改为${hostname}。yaml文件 代理: 主机名:${主机名} 卷: - / mnt /数据/ logs / ${主机名}:/日志 - / mnt /数据/ ${主机名}:/数据
当然,你可以在每次构建时动态地这样做,比如:
echo "HOSTNAME=your_hostname" > .env && sudo docker-compose up