在Docker Swarm中使用Docker堆栈进行部署时,将动态值传递给每个节点

时间:2019-07-08 12:07:51

标签: docker docker-compose docker-swarm go-templates docker-stack

我需要在docker swarm中的多个节点上部署docker堆栈。有些动态值(例如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:

我为33.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

0 个答案:

没有答案