Docker 中的 Laravel 无法识别环境变量

ber*_*eng 6 environment-variables docker amazon-elastic-beanstalk laravel-5

我在使用 Docker 中的环境变量时遇到问题。

由于某种原因,Laravel 无法看到我在 Dockerfile 中设置的环境变量。像 APP_KEY、APP_ENV 等。但是当我通过 SSH 进入 docker 容器时:

docker exec -it [container_name] bash
Run Code Online (Sandbox Code Playgroud)

并运行以下命令:

php artisan tinker
> print_r($_ENV)
Run Code Online (Sandbox Code Playgroud)

环境变量存在并设置为正确的值。但是,当我尝试在 Blade 模板中执行相同操作时,我根本看不到 APP_KEY、APP_ENV 变量。我已经编辑了php.iniDocker 容器中的文件,以便它显示

variables_order = 'EGPCS'
Run Code Online (Sandbox Code Playgroud)

file是.env我将环境变量传递到 Laravel 的唯一方法吗?

我感谢你的所有帮助。

干杯

ber*_*eng 7

我解决了!事实上,我的一个朋友给了我线索。

事实证明,FPM 配置正在删除 Elastic Beanstalk 设置的环境变量。

基于此文档:http://php.net/manual/en/install.fpm.configuration.php

clear_env boolean
Run Code Online (Sandbox Code Playgroud)

FPM 工作人员的环境干净。在添加此池配置中指定的环境变量之前,通过清除工作进程中的环境,防止任意环境变量到达 FPM 工作进程。从 PHP 5.4.27、5.5.11 和 5.6.0 开始。默认值:是。

因此,在您的php-fpm.conf文件中查找该变量并将其设置如下:

clear_env = no
Run Code Online (Sandbox Code Playgroud)

你就可以出发了!然后,您的 Laravel 应用程序可以使用以下命令拉取 Elastic Beanstalk 中设置的环境变量env()

我希望这对某人有帮助。干杯!

  • 这对我使用 fpm 时的 laravel 项目有帮助。我能够使用 Tinker 获取环境变量,但在控制器中,它们也会返回 null,直到我将其设置为 no。谢谢。花了7个小时寻找这个。 (2认同)