在Docker Compose YAML文件中禁止解析环境变量的方法
太长;没看;马上-太繁琐》
如果您不希望将$var解析为Docker Compose,您可以使用双重美元符号 $$var。
过程
我想使用Docker Compose来构建开发环境,并且有以下Redis服务的定义。
version: '3'
services:
# ...省略
redis:
image: redis:7-alpine
entrypoint: /bin/sh
command: -c 'exec redis-server --requirepass "$REDIS_PASSWORD" --loglevel verbose'
environment:
REDIS_PASSWORD: "changeme"
ports:
- '6379:6379'
命令中的$REDIS_PASSWORD的值应该会在容器启动时替换为在environment中指定的变量,但实际上却为空白。原因是在docker compose中有一个名为environment var substitution的功能,它会在执行docker compose up时,在shell中查找定义的REDIS_PASSWORD环境变量的值并进行展开。如果未定义,则自然为空白。
我认为这是一个非常出色的功能,但在这里出了问题。
如果能够使用双重美元符号,就可以直接展开,以避免。