使用docker-composev2,可以简单地设置环境变量:
docker-compose
enviroment: - MONGO_PATH=mongodb://db-mongo:27017
完整docker-compose.yml文件为:
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: - 'NODE_CONFIG={"database": {"data": {"host": "mongo"}, "session": {"host": "redis" }}}'
并使用双引号:
environment: - 'PORT=3000' - "NODE_CONFIG={\"database\": {\"data\": {\"host\": \"mongo\"}, \"session\": {\"host\": \"redis\" }}}"
值得注意的是,使用双引号""(如bash)将允许将变量放在环境变量中。
"MY_HOME_ENV_VARIABLE=${HOME}"