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}"