docker - 使用变量替换在Docker中部署堆栈

标签 docker variables environment-variables

我正在尝试使用变量替换在docker中部署堆栈,但是当我运行docker stack deploy --compose-file email.yaml email时,出现无效引用格式错误。这是我的email.yaml:

version: '3' 
services:   
  emailservice:
    image: 'email:${VERSION}'
    deploy:
      replicas: 2
      restart_policy:
        condition: on-failure
      resources:
        limits:
          memory: 300 MB
      update_config:
        delay: 12s
    ports:
     - "8000:80"

我已经尝试过email:${VERSION}"email:${VERSION}",但是它也不起作用。

另一方面,我已阅读到在docker stack deploy中,我无法使用.env文件传递变量。我应该如何通过他们?

谢谢!

最佳答案

Docker Compose会自动加载.env文件,但docker stack deploy不会加载(请参阅Compose文件引用的Variable substitution部分中的注释)。

您可以通过在env VAR=VALUE的同一行中使用docker stack deploy来解决此问题:

$ env VERSION=1.2 docker stack deploy -c email.yaml email

您使用的语法是正确的,但是由于缺少替换导致您看到错误。

或者,您可以使用${VERSION:?}语法要求强制定义变量,这将停止部署并显示易于与丢失的变量相关的错误:
$ docker stack deploy -c email.yaml email
invalid interpolation format for services.emailservice.image: "required variable VERSION is missing a value: ". You may need to escape any $ with another $.

希望能有所帮助。

关于docker - 使用变量替换在Docker中部署堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54362077/

相关文章:

environment-variables - Jealtic 环境变量作为字符串?

python - 如何临时更改 kubernetes pod 的环境变量?

docker - 无法将 UWSGI 容器与 NGINX 容器连接 [Docker]

docker - 无法将图片推送到Google容器注册表-调用者没有 'storage.buckets.get'权限

C 打印整个字符串变量(忽略\0终止)

java - Android (Eclipse) 中的 Spy/Watch 变量

javascript - 如何向Javascript添加数据库环境变量

docker - 如何使用 iptables 阻止 docker 容器端口?

centos - 使用 Docker 在 Cent OS 6.6 中安装和运行 Kurento 媒体服务器

php - 从类中变量的函数中获取值