我希望能够在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
当前回答
docker-compose现在似乎对文件中的默认环境变量提供了本地支持。
你所需要做的就是在一个名为.env的文件中声明你的变量,它们将在docker-compose.yml中可用。
例如,对于包含以下内容的.env文件:
MY_SECRET_KEY=SOME_SECRET
IMAGE_NAME=docker_image
你可以在docker-compose中访问你的变量。Yml或将它们转发到容器中:
my-service:
image: ${IMAGE_NAME}
environment:
MY_SECRET_KEY: ${MY_SECRET_KEY}
其他回答
创建模板。Yml,也就是docker-compose。Yml与环境变量。 假设你的环境变量在文件'env.sh'中 将下面的代码放在sh文件中并运行它。
env.sh来源; Rm -rf docker-compose.yml; Envsubst < "模板。docker-compose.yml";
一个新的文件docker-compose。将使用正确的环境变量值生成Yml。
示例模板。yml文件:
oracledb:
image: ${ORACLE_DB_IMAGE}
privileged: true
cpuset: "0"
ports:
- "${ORACLE_DB_PORT}:${ORACLE_DB_PORT}"
command: /bin/sh -c "chmod 777 /tmp/start; /tmp/start"
container_name: ${ORACLE_DB_CONTAINER_NAME}
示例env.sh文件:
#!/bin/bash
export ORACLE_DB_IMAGE=<image-name>
export ORACLE_DB_PORT=<port to be exposed>
export ORACLE_DB_CONTAINER_NAME=ORACLE_DB_SERVER
你不能……然而。但这是另一种选择,像码头作曲家一样思考。yml发电机:
https://gist.github.com/Vad1mo/9ab63f28239515d4dafd
基本上是一个替换变量的shell脚本。你也可以使用Grunt任务在CI进程结束时构建docker合成文件。
只关注环境变量的默认值和强制值的问题,并更新@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},是不支持的。
以下代码适用于docker-compose 3.x 在容器内设置环境变量
方法- 1直接法
web:
environment:
- DEBUG=1
POSTGRES_PASSWORD: 'postgres'
POSTGRES_USER: 'postgres'
方法- 2“。env”文件
在docker-compose.yml文件所在的位置创建一个.env文件
$ cat .env
TAG=v1.5
POSTGRES_PASSWORD: 'postgres'
你的合成文件会是这样的
$ cat docker-compose.yml
version: '3'
services:
web:
image: "webapp:${TAG}"
postgres_password: "${POSTGRES_PASSWORD}"
源
就像这样简单:
使用文档中提到的命令行:
docker-compose --env-file ./config/.env.dev config
或者使用.env文件,我认为这是最简单的方法:
web:
env_file:
- web-variables.env
带样本的文件