gpt4 book ai didi

docker - docker-compose中的env文件命名卷

转载 作者:行者123 更新时间:2023-12-02 21:23:16 28 4
gpt4 key购买 nike

我是Docker的新手。我正在编写一个docker-compose文件,该文件创建2个容器foo和bar,共享一个卷数据:

services:

foo:
container_name: foo
build: ./foo
volumes:
- data:/var/lib/

bar:
container_name: bar
build: ./bar
volumes:
- data:/var/lib/
depends_on:
- foo

volumes:
data:

现在,我想使用环境变量TAG标记容器和卷,以便指定它是用于测试还是生产。我期望这样的事情:
services:

foo:
container_name: foo_${TAG}
build: ./foo
volumes:
- data_${TAG}:/var/lib/

bar:
container_name: bar_${TAG}
build: ./bar
volumes:
- data_${TAG}:/var/lib/
depends_on:
- foo

volumes:
data_${TAG}:

显然,由于最后一行包含 data_${TAG}:,docker-compose很不高兴。

如何使用TAG env变量命名卷?

最佳答案

如果预先创建卷,则可以在外部卷名称上使用变量,如下所示(请注意,compose内的引用是固定名称,但它指向变量外部卷名称):

$ cat docker-compose.volvar.yml
version: '2'

volumes:
data:
external:
name: test-data-${TAG}

services:
source:
image: busybox
command: /bin/sh -c 'echo From ${TAG} >>/data/common.log && sleep 10m'
environment:
- TAG
volumes:
- data:/data
target:
image: busybox
command: tail -f /data/common.log
depends_on:
- source
environment:
- TAG
volumes:
- data:/data

使用 docker volume create命令预先创建卷:
$ docker volume create test-data-dev
test-data-dev

$ docker volume create test-data-uat
test-data-uat

$ docker volume create test-data-stage
test-data-stage

这是运行它的一个示例(我没有使用其他目录或更改项目名称,因此compose每次都替换了我的容器,但是我可以很容易地更改项目以使其同时运行并以相同的结果运行):
$ TAG=dev docker-compose -f docker-compose.volvar.yml up -d
Creating test_source_1
Creating test_target_1

$ docker logs test_target_1
From dev

$ TAG=uat docker-compose -f docker-compose.volvar.yml up -d
Recreating test_source_1
Recreating test_target_1

$ docker logs test_target_1
From uat

$ TAG=stage docker-compose -f docker-compose.volvar.yml up -d
Recreating test_source_1
Recreating test_target_1

$ docker logs test_target_1
From stage

$ # just to show that the volumes are saved and unique,
$ # rerunning uat generates a second line
$ TAG=uat docker-compose -f docker-compose.volvar.yml up -d
Recreating test_source_1
Recreating test_target_1

$ docker logs test_target_1
From uat
From uat

关于docker - docker-compose中的env文件命名卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42952855/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com