docker compose-如何转义环境变量

docker compose-如何转义环境变量,docker,environment-variables,docker-compose,Docker,Environment Variables,Docker Compose,通过docker composev2,可以通过以下方式设置环境变量: enviroment: - MONGO_PATH=mongodb://db-mongo:27017 完整的docker compose.yml文件为: version: '2' services: web: build: . environment: - MONGO_PATH=mongodb://db-mongo:27017 ports: - "3000:3000"

通过
docker compose
v2,可以通过以下方式设置环境变量:

enviroment:
  - MONGO_PATH=mongodb://db-mongo:27017
完整的
docker compose.yml
文件为:

version: '2'
services:
  web:
    build: .
    environment:
      - MONGO_PATH=mongodb://db-mongo:27017
    ports:
      - "3000:3000"
    volumes:
      - .:/app
      - /app/node_modules
    depends_on: 
      - db-mongo
      - db-redis
  db-mongo:
    image: mongo
    restart: unless-stopped
    command: --smallfiles
    ports:
      - "27017:27017"
    volumes:
      - ./data:/data/db
  [...]
但是,如何转义不是普通字符串的环境变量

{"database": {"data": {"host": "mongo"}}}
我试过:

NODE_CONFIG=\{"database": \{"data"\: \{"host": "mongo"\}, "session": \{"host": "redis" \}\}\}
NODE_CONFIG="\{"database": \{"data"\: \{"host": "mongo"\}, "session": \{"host": "redis" \}\}\}"
NODE_CONFIG='{"database": {"data": {"host": "mongo"}, "session": {"host": "redis" }}}'
错误:yaml.parser.ParserError:在中分析块映射时出错 “/docker compose.yml”,第6行第9列应为,但 在“/docker compose.yml”第6行第92列找到“}”

环境变量(包括它们的名称),必须完全包装在单引号或双引号中

并使用双引号:

environment:
  - 'PORT=3000'
  - "NODE_CONFIG={\"database\": {\"data\": {\"host\": \"mongo\"}, \"session\": {\"host\": \"redis\" }}}"
值得注意的是,像bash一样,使用双引号
”将允许在环境变量中放置变量

"MY_HOME_ENV_VARIABLE=${HOME}"

docker compose不允许您在没有引号的情况下执行此操作!!另请参见:@TomislavMikulin您知道如何处理env文件了吗?1.26中预期的对引号的支持:
"MY_HOME_ENV_VARIABLE=${HOME}"