Quiero pasar los parámetros de configuración del archivo docker-compose a mi aplicación Symfony, probé esto:
app: image: <NGINX + PHP-FPM IMAGE> environment: DATABASE_HOST: dbMi archivo de parámetros.yml:
database_host: "%env(DATABASE_HOST)%"Recibo el error 500 "Variable de entorno no encontrada: DATABASE_HOST"
También probé SYMFONY__DATABASE_HOST en docker-compose pero tampoco funcionó.
¿Como funciona?
El error que recibes se refiere a las variables de entorno de tiempo de ejecución de Symfony (ver aquí) . Las variables de entorno de Docker Compose se recuperan del archivo .env que reside dentro del contexto de compilación (también conocido como el directorio desde donde desea que se ejecute Docker- compose ) del archivo docker-compose.yml . Lo que realmente quieres hacer es asegurarte de que las variables de entorno que configuraste en tu configuración/parámetros de Symfony y tu archivo docker-compose.yml coincidan, especialmente el host db .
Debería considerar dividir su imagen en imágenes PHP-FPM y Nginx para tener una mejor escalabilidad potencial y una separación de preocupaciones de acuerdo con las mejores prácticas descritas por Docker aquí . Todas estas tecnologías tienen imágenes mantenidas regularmente disponibles en Docker Hub .
Aquí está mi docker-compose.yml que crea contenedores para PHP-FPM, MySQL y Nginx en un entorno de varios contenedores con los últimos paquetes estables disponibles a la fecha.
version: '3' services: db: image: mysql volumes: - ./.data/db:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD} php: build: php7.1-fpm depends_on: - db ports: - "9000:9000" volumes: - symfony-bind-mount:/var/www/symfony - symfony-logs-bind-mount:/var/www/symfony/app/logs nginx: build: nginx depends_on: - php ports: - "8025:8025" - "80:80" volumes: - symfony-bind-mount:/var/www/symfony - nginx-logs-bind-mount:/var/log/nginx volumes: symfony-bind-mount: driver: local driver_opts: o: bind,rw type: none device: ${SYMFONY_APP_PATH} nginx-logs-bind-mount: driver: local driver_opts: o: bind,rw type: none device: ${DOCKER_SYMFONY_PATH}/logs/nginx symfony-logs-bind-mount: driver: local driver_opts: o: bind,rw type: none device: ${DOCKER_SYMFONY_PATH}/logs/symfonyAquí está mi archivo .env:
# Symfony application's path SYMFONY_APP_PATH=/absolute/path/to/symfony/project # Path to local docker-symfony repository DOCKER_SYMFONY_PATH=/absolute/path/to/sibling/docker/directory # MySQL MYSQL_ROOT_PASSWORD=root MYSQL_DATABASE=mydb MYSQL_USER= MYSQL_PASSWORD=passwordPuede consultar mi bifurcación del repositorio docker-symfony de maxpou aquí . Actualicé docker-compose.yml y los montajes de enlace para que sean compatibles con la versión 3 del formato de archivo Compose.