我有一个 docker-compose 文件,它使用变量替换一些秘密,如果它们没有提供或为空,我想得到一个错误,为此我尝试了这个:
environment:
- >-
JAVA_OPTS=
-DMYSQL_USER=${MYSQL_USER:?MYSQL_USER_NOT_SET}
-DMYSQL_PASSWORD=${MYSQL_PASSWORD:?MYSQL_PASSWORD_NOT_SET}
-DMYSQL_URL=db:3306/${MYSQL_DATABASE:?MYSQL_DATABASE_NOT_SET}
但是,它给了我错误:
错误:服务“myservice”中“环境”选项的插值格式无效:“JAVA_OPTS= -DMYSQL_USER=${MYSQL_USER:?MYSQL_USER_NOT_SET}...
根据https://docs.docker.com/compose/compose-file/#variable-substitution这应该可以工作,因为它有这个片段:
同样,以下语法允许您指定强制变量:
如果 VARIABLE 在环境中未设置或为空,则 ${VARIABLE:?err} 退出并显示包含 err 的错误消息。如果在环境中未设置 VARIABLE,则 ${VARIABLE?err} 退出并显示包含 err 的错误消息。
我的 docker-compose 中也有version: "3.4"
,所以这不应该是问题。
已经尝试过,${MY_VAR?MY_ERROR}
但它也不起作用。我什至查看了源代码,但没有发现任何帮助。
编辑 :
我试图进行最小尺寸的复制:
码头工人-compose.yml
version: "3.4"
services:
hello:
image: hello-world
environment:
- TEST=${TEST?err}
docker-compose up
错误:服务“hello”中“环境”选项的插值格式无效:“TEST=${TEST?err}