在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环境变量的值并进行展开。如果未定义,则自然为空白。

我认为这是一个非常出色的功能,但在这里出了问题。

如果能够使用双重美元符号,就可以直接展开,以避免。