使用唯一的环境变量进行docker-compose缩放

时间:2019-05-18 22:20:19

标签: docker docker-compose

我在docker-compose文件中有一个示例计算服务,该服务按预期工作得很好。

version: "3"
services:
  compute-service:
    image: dummy/compute
    environment:
      - INPUT=2

但是有时我需要使用diff输入来运行此服务(例如INPUT = 4、7、9、10、12..etc)。我不喜欢为每个输入多次复制和粘贴服务的想法。缩放是一种选择。但是,如何确保每个实例都可以在唯一的输入变量上工作。


我知道我可以使用这样的env变量。我的问题与如何传递唯一值有关,作为扩展的一部分!!

version: "3"
services:
  compute-service:
    image: dummy/compute
    environment:
      - INPUT=${INPUT}

2 个答案:

答案 0 :(得分:1)

使用docker-composeI don't believe there's any support for this。但是,在可以使用类似撰写文件的群集模式下,可以使用service templates{{.Task.Slot}}作为环境变量进行传递。您可以使用docker swarm init部署单节点群集集群。我将使用docker-compose up部署以下示例,而不是docker stack deploy -c docker-compose.yml test

这是一个使用{{.Task.Slot}}功能的docker-compose.yml文件示例:

version: '3'
services:
  test:
    image: busybox
    command: /bin/sh -c "echo My task number is $$task_id && tail -f /dev/null"
    environment:
      task_id: "{{.Task.Slot}}"
    deploy:
      replicas: 5

然后,检查以下每个正在运行的容器:

$ docker ps --filter label=com.docker.swarm.service.name=test_test
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
ccd0dbebbcbe        busybox:latest      "/bin/sh -c 'echo My…"   About a minute ago   Up About a minute                       test_test.3.i3jg6qrg09wjmntq1q17690q4
bfaa22fa3342        busybox:latest      "/bin/sh -c 'echo My…"   About a minute ago   Up About a minute                       test_test.5.iur5kg6o3hn5wpmudmbx3gvy1
a372c0ce39a2        busybox:latest      "/bin/sh -c 'echo My…"   About a minute ago   Up About a minute                       test_test.4.rzmhyjnjk00qfs0ljpfyyjz73
0b47d19224f6        busybox:latest      "/bin/sh -c 'echo My…"   About a minute ago   Up About a minute                       test_test.1.tm97lz6dqmhl80dam6bsuvc8j
c968cb5dbb5f        busybox:latest      "/bin/sh -c 'echo My…"   About a minute ago   Up About a minute                       test_test.2.757e8evknx745120ih5lmhk34

$ docker ps --filter label=com.docker.swarm.service.name=test_test -q | xargs -n 1 docker logs
My task number is 3
My task number is 5
My task number is 4
My task number is 1
My task number is 2

答案 1 :(得分:0)

我只是使用存储在CMFCButton文件中的环境变量,在该容器中,每次启动容器时,BASH都会递增.env文件中的INPUT

.env

要找到最后一个输入,您只需要在递增之前先阅读version: "3" services: compute-service: image: dummy/compute environment: - INPUT=${INPUT} 文件