docker - 使用 docker stack deploy 托管环境变量

标签 docker docker-swarm docker-swarm-mode

我想知道是否有一种方法可以使用从部署容器的主机获取的环境变量,而不是从执行 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"

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

最佳答案

是的,当您将两个概念结合起来时,这会起作用:

  1. node labels , 其中 Hostname 是内置的之一。
  2. service go templates ,也适用于堆栈文件。

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

version: '3.4'

services:
  nginx:
    image: nginx
    environment:
      DUDE: "{{.Node.Hostname}}"
    deploy:
      replicas: 3

关于docker - 使用 docker stack deploy 托管环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49025686/

相关文章:

docker - 在哪里使用Swarm在Docker容器中找到使用docker-compose构建的dotnet应用程序构建的发布文件?

docker - 通过 SSH 将命令传递给 docker vm

docker swarm 服务名称

带有 Traefik 的 Docker Swarm : containers are up but getting 404

google-chrome - 无法在Docker上安装Google Chrome

docker - 升级 Quarkus 1.11->1.13 的 Dockerfile

docker - 如何配置 docker 日志记录以有条件地发送到 CloudWatch?

jenkins - Jenkins用户使用docker(在docker容器内部)

docker - Nginx 上游不适用于 docker 部署堆栈

docker-compose - 如何在docker swarm中应用cgroup parent?