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

Posted

技术标签:

【中文标题】Laravel 在 Docker 中无法识别环境变量【英文标题】:Environment variables are not recognized by Laravel in Docker 【发布时间】:2016-06-24 14:34:12 【问题描述】:

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

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

docker exec -it [container_name] bash

并运行以下命令:

php artisan tinker
> print_r($_ENV)

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

variables_order = 'EGPCS'

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

感谢您的帮助。

干杯

【问题讨论】:

【参考方案1】:

我解决了!其实我的一个朋友给了我线索。

原来是 FPM 配置删除了 Elastic Beanstalk 设置的环境变量。

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

clear_env boolean

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

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

clear_env = no

你可以走了!然后,您的 Laravel 应用程序可以使用 env() 拉取在 Elastic Beanstalk 中设置的环境变量

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

【讨论】:

【参考方案2】:

使用 EB CLI 而不是 .env,您可以将环境变量传递到 Elastic Beanstalk 中的 docker 容器。

例如:

$ eb setenv APP_KEY=xxx APP_ENV=xxx

请阅读以下文档: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb3-setenv.html

【讨论】:

以上是关于Laravel 在 Docker 中无法识别环境变量的主要内容,如果未能解决你的问题,请参考以下文章

java无法识别怎么办

Laravel Sail 在 Ubuntu 20.04 LTS 中无法正常工作

如何使用 docker-compose 在 docker 容器中为 Laravel 环境安装 Behat?

在 docker 环境中使用 laravel websockets 包

docker不识别mnt

docker中lnmp环境部署laravel框架