我希望能够在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
当前回答
我有一个简单的bash脚本,我为此创建,这只是意味着在使用之前在你的文件上运行它: https://github.com/antonosmond/subber
基本上只要创建你的合成文件使用双花括号表示环境变量,例如:
app:
build: "{{APP_PATH}}"
ports:
- "{{APP_PORT_MAP}}"
双花括号中的任何内容都将被同名的环境变量替换,因此如果我设置了以下环境变量:
APP_PATH=~/my_app/build
APP_PORT_MAP=5000:5000
运行subber docker-compose。Yml生成的文件看起来像这样:
app:
build: "~/my_app/build"
ports:
- "5000:5000"
其他回答
我最终在我的deploy.sh脚本中使用“sed”来完成这一点,尽管我的要求略有不同,因为Docker - Compose是由Terrafom调用的:通过Azure应用程序服务的Terraform脚本将变量传递给Docker Compose
eval "sed -i 's/MY_VERSION/$VERSION/' ../docker-compose.yaml"
cat ../docker-compose.yaml
terraform init
terraform apply -auto-approve \
-var "app_version=$VERSION" \
-var "client_id=$ARM_CLIENT_ID" \
-var "client_secret=$ARM_CLIENT_SECRET" \
-var "tenant_id=$ARM_TENANT_ID" \
-var "subscription_id=$ARM_SUBSCRIPTION_ID"
eval "sed -i 's/$VERSION/MY_VERSION/' ../docker-compose.yaml"
要添加一个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/
当为卷使用环境变量时,您需要:
在包含docker-compose的文件夹中创建.env文件。yaml文件 在.env文件中声明变量: 主机名= your_hostname 在docker-compose中将$hostname修改为${hostname}。yaml文件 代理: 主机名:${主机名} 卷: - / mnt /数据/ logs / ${主机名}:/日志 - / mnt /数据/ ${主机名}:/数据
当然,你可以在每次构建时动态地这样做,比如:
echo "HOSTNAME=your_hostname" > .env && sudo docker-compose up
你不能……然而。但这是另一种选择,像码头作曲家一样思考。yml发电机:
https://gist.github.com/Vad1mo/9ab63f28239515d4dafd
基本上是一个替换变量的shell脚本。你也可以使用Grunt任务在CI进程结束时构建docker合成文件。
将env添加到。env文件中
如
VERSION=1.0.0
然后将其保存到deploy.sh
INPUTFILE=docker-compose.yml
RESULT_NAME=docker-compose.product.yml
NAME=test
prepare() {
local inFile=$(pwd)/$INPUTFILE
local outFile=$(pwd)/$RESULT_NAME
cp $inFile $outFile
while read -r line; do
OLD_IFS="$IFS"
IFS="="
pair=($line)
IFS="$OLD_IFS"
sed -i -e "s/\${${pair[0]}}/${pair[1]}/g" $outFile
done <.env
}
deploy() {
docker stack deploy -c $outFile $NAME
}
prepare
deploy