docker-compose scaling с уникальной переменной среды - PullRequest
0 голосов
/ 19 мая 2019

В моем файле docker-compose есть пример службы вычислений, которая отлично работает, как и ожидалось.

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

Однако могут быть случаи, когда мне нужно запустить этот сервис с входами diff (скажем, INPUT = 4, 7, 9, 10, 12 и т. Д.).Мне не нравится идея копировать и вставлять сервис несколько раз для каждого ввода.Масштабирование является опцией.Но как я могу гарантировать, что каждый экземпляр работает с уникальной входной переменной.


Я знаю, что могу использовать переменную env, как это.Мой вопрос скорее связан с тем, как передавать уникальные значения как часть масштабирования !!

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

Ответы [ 2 ]

1 голос
/ 19 мая 2019

С docker-compose, Я не верю, что есть какая-либо поддержка для . Однако в режиме роя, в котором можно использовать аналогичный составной файл, вы можете передать {{.Task.Slot}} в качестве переменной среды, используя шаблоны служб . Вы можете развернуть кластер с одним узлом с помощью docker swarm init. Вместо docker-compose up я развертываю следующий пример с docker stack deploy -c docker-compose.yml test.

А вот пример файла docker-compose.yml с использованием функции {{.Task.Slot}}:

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
0 голосов
/ 19 мая 2019

Я бы просто использовал переменную окружения, хранящуюся в файле .env, где при каждом запуске контейнера BASH увеличивает INPUT в файле .env

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

Чтобы найти последнийввод, вы просто должны прочитать файл .env, прежде чем увеличивать его

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...