docker-compose - 如何转义环境变量 [英] docker-compose - how to escape environment variables

查看:24
本文介绍了docker-compose - 如何转义环境变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

环境:- MONGO_PATH=mongodb://db-mongo:27017

完整的 docker-compose.yml 文件是:

版本:'2'服务:网络:建造: .环境:- MONGO_PATH=mongodb://db-mongo:27017端口:- 3000:3000"卷:- .:/应用程序-/app/node_modules依赖于取决于:- db-mongo- db-redis数据库蒙戈:图片:蒙戈重新启动:除非停止命令:--smallfiles端口:- 27017:27017"卷:- ./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 列中找到了 '}'

解决方案

环境变量(包括它们的名字),必须完全用单引号或双引号括起来:""''

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

并使用双引号:

环境:- '端口 = 3000'- "NODE_CONFIG={"database": {"data": {"host": "mongo"}, "session": {"host": "redis"}}}"

值得注意的是,使用双引号 "" 就像 bash 一样,将允许将变量放在环境变量中.

"MY_HOME_ENV_VARIABLE=${HOME}"

With docker-compose v2 environment variables can be set by simply:

enviroment:
  - MONGO_PATH=mongodb://db-mongo:27017

The full docker-compose.yml file being:

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

However, how can I escape environment variables that are not a plain string?

{"database": {"data": {"host": "mongo"}}}

I tried:

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

ERROR: yaml.parser.ParserError: while parsing a block mapping in "./docker-compose.yml", line 6, column 9 expected , but found '}' in "./docker-compose.yml", line 6, column 92

解决方案

Environment variables (including their name), have to be fully wrapped inside single or double quotes: "" or ''

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

And using double quotes:

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

It is remarkable to note that using double quotes "", like bash, will allow placing variables inside the environment variable.

"MY_HOME_ENV_VARIABLE=${HOME}"

这篇关于docker-compose - 如何转义环境变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆