web-dev-qa-db-ja.com

docker-compose-環境変数をエスケープする方法

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

26
zurfyx

環境変数(名前を含む)、一重引用符または二重引用符で完全にラップする必要があります"" または ''

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