将docker-compose环境传递给symfony配置

时间:2017-03-24 22:42:03

标签: symfony docker environment-variables

我想将配置参数从docker-compose文件传递给我的Symfony应用程序,我试过这个:

app:
    image: <NGINX + PHP-FPM IMAGE>
    environment:
        DATABASE_HOST: db

我的parameters.yml文件:

database_host: "%env(DATABASE_HOST)%"

我收到错误500&#34;找不到环境变量:DATABASE_HOST&#34;

我还在docker-compose中尝试过SYMFONY__DATABASE_HOST,但也无法正常工作。

它是如何运作的?

1 个答案:

答案 0 :(得分:1)

您接收的错误是指Symfony运行时环境变量(see here)。 Docker组合环境变量是从.env文件中检索的,该文件位于构建上下文(AKA是您希望 docker-compose 运行的目录)的docker-compose.yml文件中。您真正想要做的是确保您在Symfony配置/参数和docker-compose.yml文件中设置的环境变量匹配,尤其是数据库主机

根据Docker here概述的最佳实践,您应该考虑将图像分解为PHP-FPM和Nginx图像,以获得更好的潜在可伸缩性和关注点分离。所有这些技术都在Docker Hub上提供定期维护的图像。

这是我的docker-compose.yml,它在多容器环境中为PHP-FPM,MySQL和Nginx创建容器,并提供截至目前的最新稳定包。

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/symfony

这是我的.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=password

您可以查看我的maxpou的docker-symfony存储库here的分支。我已经更新了docker-compose.yml和绑定挂载以与Compose文件格式的版本3兼容。