使用 docker stack 部署主机环境变量

2024-05-01

我想知道是否有一种方法可以使用从部署容器的主机获取的环境变量,而不是从容器所在的主机获取的环境变量docker stack deploy命令被执行。例如想象以下docker-compose.yml在三节点 Docker Swarm 集群上启动:

version: '3.2'
services:
  kafka:
    image: wurstmeister/kafka
    ports:
      - target: 9094
        published: 9094
        protocol: tcp
        mode: host
    deploy:
      mode: global
    environment:
      KAFKA_JMX_OPTS: "-Djava.rmi.server.hostname=${JMX_HOSTNAME} -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.rmi.port=1099"

The JMX_HOSTNAME应从实际部署容器的主机获取,并且每个容器的值不应该相同。 有正确的方法吗?


是的,当您结合两个概念时,这是有效的:

  1. Swarm 节点标签 https://docs.docker.com/config/labels-custom-metadata/,其中 Hostname 是内置的之一。
  2. Swarm 服务模板 https://docs.docker.com/engine/swarm/services/#create-services-using-templates,它也适用于堆栈文件。

这会将每个容器的主机名拉入 DUDE 的 ENV 值,使其成为其运行的主机:

version: '3.4'

services:
  nginx:
    image: nginx
    environment:
      DUDE: "{{.Node.Hostname}}"
    deploy:
      replicas: 3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 docker stack 部署主机环境变量 的相关文章

随机推荐