我正在尝试使用变量替换在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/