在docker-compose中的env文件命名卷
我是Docker的新手。 我正在写一个docker-compose文件,它创build2个容器, 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:
现在,我想使用环境variablesTAG来标记容器和卷,以便指定它是用于testing还是生产 。 我期望这样的事情:
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}:
显然,docker-compose是不愉快的,因为最后一行包含data_${TAG}:
我怎样才能用TAG envvariables来命名我的音量?
如果事先创build卷,则可以像这样在外部卷名称上使用该variables(请注意,撰写内部的引用是一个固定的名称,但它指向一个可变的外部卷名称):
$ 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
:
$ 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
下面是运行它的一个例子(我没有使用不同的目录或者改变项目名称,所以每次都要更换我的容器,但是我可以很容易地改变项目,并且同时运行它们,并得到相同的结果):
$ 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-compose.yml文件
services: foo: container_name: foo_${TAG} build: ./foo volumes: - /var/lib/ bar: container_name: bar_${TAG} build: ./bar volumes: - /var/lib/ depends_on: - foo
然后我创build一个包含的文件docker-compose.override.yml
services: foo: volumes: - data_dev:/var/lib/ bar: volumes: - data_dev:/var/lib/
这样,当你启动docker-compose时,它将使用主文件并使用其他文件覆盖其值。
你应该有3个文件:
- 泊坞窗,compose.yml
- 搬运工-compose.override-prod.yml
- 搬运工-compose.override-dev.yml
然后当你build立你有2:
- (我所做的)我复制docker-compose.override-.yml到docker-compose.override.yml和Docker Compose并自动将这两个文件
- 你可以提供2个文件用于docker撰写文件(我忘了参数是什么…我想这是“-f”)
我希望它有帮助