how get env variables from docker in symfony yml c

2019-02-20 06:39发布

问题:

in docker-compose.yml:

mysql:
  image: mysql:latest
  container_name: mysql
  environment:
    - MYSQL_ROOT_PASSWORD=root
    - MYSQL_DATABASE=symfony
    - MYSQL_USER=symfony
    - MYSQL_PASSWORD=symfony

how i can get this variables in yml config file:

parameters:
    database_host: 172.17.42.4
    database_port: 3306
    database_name: symfony
    database_user: symfony
    database_password: symfony

in $_SERVER they are fetch like:

$_SERVER["SYMFONY_MYSQL_ENV_MYSQL_DATABASE"],
$_SERVER["SYMFONY_MYSQL_PORT_3306_TCP_ADDR"],
$_SERVER["SYMFONY_MYSQL_ENV_MYSQL_PASSWORD"],
$_SERVER["SYMFONY_MYSQL_ENV_MYSQL_USER"]

回答1:

In symfony, you can include PHP files in yaml configuration, where you can set parameters in runtime overriding the static parameter values from parameters.yml.

In your app/config/config.yml

imports:
    - { resource: parameters.yml }
    - { resource: parameters.php }

Then create the file app/config/parameters.php with the following content

<?php
// app/config/parameters.php

$container->setParameter('database_name', $_SERVER['SYMFONY_MYSQL_ENV_MYSQL_DATABASE']);
$container->setParameter('database_host', $_SERVER['SYMFONY_MYSQL_PORT_3306_TCP_ADDR']);
$container->setParameter('database_user', $_SERVER['SYMFONY_MYSQL_ENV_MYSQL_USER']);
$container->setParameter('database_password', $_SERVER['SYMFONY_MYSQL_ENV_MYSQL_PASSWORD']);


回答2:

There now (as of Symfony 3.2) is a syntax to do this in yaml files:

# app/config/parameters.yml
parameters:
    database_host: '%env(DATABASE_HOST)%'

see http://symfony.com/doc/current/configuration/external_parameters.html