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

我是Docker的新手。 我正在写一个docker-compose文件,它创build2个容器, foobar ,共享卷数据

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:

  1. (我所做的)我复制docker-compose.override-.yml到docker-compose.override.yml和Docker Compose并自动将这两个文件
  2. 你可以提供2个文件用于docker撰写文件(我忘了参数是什么…我想这是“-f”)

我希望它有帮助