Avec docker-compose
Les variables d’environnement v2 peuvent être définies simplement:
enviroment:
- MONGO_PATH=mongodb://db-mongo:27017
Le complet docker-compose.yml
fichier étant:
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
[...]
Cependant, comment puis-je échapper à des variables d'environnement qui ne sont pas une simple chaîne?
{"database": {"data": {"Host": "mongo"}}}
J'ai essayé:
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" }}}'
ERREUR: yaml.parser.ParserError: lors de l’analyse d’un mappage de blocs dans "./docker-compose.yml", ligne 6, colonne 9 attendue, mais a trouvé "}" dans "./docker-compose.yml", ligne 6, colonne 92
Variables d'environnement (y compris leur nom), doivent être entièrement entourées de guillemets simples ou doubles: ""
ou ''
environment:
- 'NODE_CONFIG={"database": {"data": {"Host": "mongo"}, "session": {"Host": "redis" }}}'
Et en utilisant des guillemets doubles:
environment:
- 'PORT=3000'
- "NODE_CONFIG={\"database\": {\"data\": {\"Host\": \"mongo\"}, \"session\": {\"Host\": \"redis\" }}}"
Il est remarquable de noter que l’utilisation de guillemets doubles ""
, comme bash, permettra de placer des variables dans la variable d'environnement.
"MY_HOME_ENV_VARIABLE=${HOME}"