You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker-Compose无法向PHP传递环境变量的问题求助

Docker环境变量无法传递到PHP的解决方案

问题诊断

首先验证容器内是否已存在目标环境变量:

docker-compose exec app bash -c 'echo $MY_ENV'

如果输出dev,说明环境变量已成功传递到容器,问题出在PHP或应用层面;如果无输出,请检查docker-compose.yml的语法(比如缩进、环境变量定义格式)是否正确。

解决方案1:修改PHP的variables_order配置

PHP默认的variables_order参数为"GPCS",未包含环境变量(E),导致$_SERVER数组不会加载环境变量。在Dockerfile中添加以下配置:

# 调整PHP配置,让环境变量进入$_SERVER数组
RUN echo "variables_order = \"EGPCS\"" >> /usr/local/etc/php/php.ini

重新构建镜像并重启容器:

docker-compose build app
docker-compose up -d

完成后即可通过$_SERVER['MY_ENV']获取变量值。

解决方案2:处理Laravel的.env覆盖问题

你的环境是Laravel项目,若项目根目录的.env文件中存在MY_ENV=xxx定义,Laravel的env()函数会优先读取该文件内容,覆盖Docker环境变量。此时只需删除.env中的MY_ENV行,env('MY_ENV')或getenv('MY_ENV')即可正常读取Docker传递的变量。

解决方案3:兜底的启动命令调整(可选)

若因php -S的shell执行逻辑导致环境变量未被PHP进程继承,可修改docker-compose.yml中app服务的启动命令:

command: bash -c 'MY_ENV=$MY_ENV php -S app:8000 -t public'

额外说明

你的Dockerfile基于php:7.2-fpm,但当前用php -S启动内置服务器,并未用到FPM。若后续切换Nginx+FPM架构,需确保FPM允许继承环境变量,可在Dockerfile中添加:

# 配置FPM不清除容器环境变量
RUN echo "clear_env = no" >> /usr/local/etc/php-fpm.d/www.conf

内容的提问来源于stack exchange,提问作者Paul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:20:53