Передача динамических значений каждому узлу при развертывании с помощью Docker Stack в Docker Swarm - PullRequest
0 голосов
/ 08 июля 2019

Мне нужно развернуть докерский стек на нескольких узлах в Docker Swarm. Существуют некоторые динамические значения, такие как путь к ssl-сертификатам, который отличается для каждого рабочего узла. Я знаю, что не могу передать значения в переменных среды, потому что все узлы получат значения, извлеченные из среды узла менеджера.

Я искал и нашел другой вопрос в StackOverflow, касающийся той же проблемы. Вот URL

В решении указано, что я должен использовать приведенную ниже команду для каждого узла, чтобы установить значения.

docker node update --label-add key=value <node-id>

Моя проблема - когда я хочу прочитать значения в файле docker-compose.yaml, я получаю сообщение об ошибке:

service proxy: undefined volume "{{.Node.Labels.Chain}}"

Я развертываю с помощью команды:

docker stack deploy -c docker-compose.yaml stack_name

Вот файл docker-compose.yaml:

version: '3'

services:

  redis:
    image: redis:latest
    deploy:
      mode: global
      restart_policy:
        condition: on-failure
    networks:
      - connector

  proxy:
    image: myusername/myrepo:${VERSION}
    deploy:
      mode: global
      restart_policy:
        condition: on-failure
    volumes:
      - "{{.Node.Labels.Chain}}:/fullchain.pem"
      - "{{.Node.Labels.Key}}:/privkey.pem"
      - "${ERROR_LOG}:/err.log"
    ports:
      - "${HOST_PORT}:${CONTAINER_PORT}"
    networks:
      - connector

networks:
  connector:

Я пробовал разные значения для версии, такие как 3 или 3.4, но не помогло.

Я выполнил команду docker node inspect <HOST_NAME>, и вот результаты, относящиеся к разделу Labels:

        "Spec": {
            "Labels": {
                "Chain": "/etc/letsencrypt/live/mydomain.com/fullchain.pem",
                "Key": "/etc/letsencrypt/live/mydomain.com/privkey.pem"
            },
            "Role": "manager",
            "Availability": "active"
        }

Я пробовал разные значения для ключа монтирования в docker-compose.yaml файле, например {{.Node.Spec.Labels.Chain}}, но они тоже не помогли.

Буду признателен, если кто-нибудь поможет мне решить проблему.

Результаты docker version:

Client:
 Version:           18.09.7
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        2d0083d
 Built:             Thu Jun 27 17:56:23 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.7
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.8
  Git commit:       2d0083d
  Built:            Thu Jun 27 17:23:02 2019
  OS/Arch:          linux/amd64
  Experimental:     false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...