docker-compose – 如何转义环境variables

使用docker-compose v2环境variables可以简单地设置:

 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 [...] 

但是,我怎么能逃避不是一个普通的string的环境variables?

 {"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:在parsing第6行第9列“./docker-compose.yml”中的块映射的同时,在第6行的“./docker-compose.yml”中find了“}”第92列

环境variables(包括它们的名称) 必须完全包裹在单引号或双引号内""''

 environment: - 'NODE_CONFIG={"database": {"data": {"host": "mongo"}, "session": {"host": "redis" }}}' 

并使用双引号:

 environment: - 'PORT=3000' - "NODE_CONFIG={\"database\": {\"data\": {\"host\": \"mongo\"}, \"session\": {\"host\": \"redis\" }}}" 

值得注意的是,使用双引号"" ,如bash,将允许将variables放置在环境variables中。

 "MY_HOME_ENV_VARIABLE=${HOME}"