将docker-compose环境传递给symfonyconfiguration

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

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

我的parameters.yml文件:

 database_host: "%env(DATABASE_HOST)%" 

我得到错误500“找不到环境variables:DATABASE_HOST”

我也尝试了docker-compose中的SYMFONY__DATABASE_HOST,但也无法正常工作。

它是如何工作的?

您收到的错误是指Symfony运行时环境variables(请参阅此处) 。 Docker组合环境variables是从驻留在.env文件的构build上下文(也就是您希望docker-compose运行的目录)中的docker-compose.yml文件中docker-compose.yml 。 你真正想要做的是确保你在Symfony config / parameters和docker-compose.yml文件中设置的环境variablesdocker-compose.yml匹配, 尤其是db主机

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

这里是我docker-compose.yml ,它在一个多容器环境中为PHP-FPM,MySQL和Nginx创build容器,包含当今最新的稳定包。

 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 

你可以在这里检查我的fork的maxpou的docker-symfony库。 我已经更新了docker-compose.yml,绑定挂载与Compose文件格式的版本3兼容。