我需要在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:
我为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