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

使用变量替换在docker中部署堆栈,docker,variables,environment-variables,Docker,Variables,Environment Variables,我试图使用变量替换在docker中部署堆栈,但当我运行docker stack deploy--compose file email.yaml email时,出现无效引用格式的错误。这是我的电子邮件。yaml: version: '3' services: emailservice: image: 'email:${VERSION}' deploy: replicas: 2 restart_policy: condition:

我试图使用变量替换在docker中部署堆栈,但当我运行
docker stack deploy--compose file email.yaml 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"
我尝试了
电子邮件:${VERSION}
电子邮件:${VERSION}
,但也不起作用

另一方面,我读到在docker stack deploy中,我不能使用.env文件传递变量。我该如何通过他们


谢谢

Docker Compose会自动加载
.env
文件,但
Docker stack deploy
不会加载(请参阅Compose file reference一节中的注释)

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

$ 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 Compose会自动加载
.env
文件,但
Docker stack deploy
不会(请参阅撰写文件参考部分中的注释)

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

$ 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 compose config
生成docker-compose.yml输出(使用变量替换):

这是一个开放的平台。 我也有同样的问题,我能找到的最好的解决办法来自于

建议的解决方法使用
docker compose config
生成docker-compose.yml输出(使用变量替换):


默认情况下,docker stack deploy不处理.env文件。这是一个docker compose功能。您可以在一行中对其进行预处理

docker stack deploy -c <(docker-compose config) stack-name-here

默认情况下,docker stack deploy-cdocker stack deploy不处理.env文件。这是一个docker compose功能。您可以在一行中对其进行预处理

docker stack deploy -c <(docker-compose config) stack-name-here

docker stack deploy-c此回复应为可接受的回复。使用
docker compose config
和管道调用
docker stack deploy
真是一件乐事!这个答复应该是可以接受的。使用
docker compose config
和管道调用
docker stack deploy
真是一件乐事!