Azure App Service环境变量使用及配置不显示问题排查
首先得给你吃个定心丸:Azure App Service的Application Settings在Docker部署场景下,不会直接出现在SSH的env输出里——这是因为这些变量是注入到容器的应用进程中,而非全局shell环境,所以env命令看不到是正常情况,但这不代表PHP没法读取。不过咱们还是一步步排查确认:
先验证PHP能否实际读取变量
最快的验证方式是写个极简测试脚本,比如创建info.php:<?php // 读取单个变量 echo getenv('你的环境变量名'); // 或者打印所有可用环境变量 print_r($_ENV); ?>部署后访问这个脚本,如果能拿到你设置的变量,说明配置本身是生效的,只是SSH shell没加载这些变量而已;如果拿不到,再继续往下排查。
检查Docker镜像的启动命令
Azure会把环境变量注入容器的主进程,如果你的镜像用了自定义启动脚本(比如entrypoint.sh),一定要确保用exec启动PHP进程——不用exec的话,子进程不会继承这些环境变量。比如正确写法:exec php-fpm而非直接
php-fpm,这样主进程会被替换成PHP-FPM,环境变量就能顺利继承。确认Application Settings的配置范围
检查你设置的变量是不是针对当前部署的插槽(slot)?如果部署到了staging插槽,要确保变量是在对应插槽的「配置」里添加的,而非production插槽。另外留意有没有勾选「部署槽设置」,勾选后该变量仅在当前插槽生效,切换插槽时不会同步,这点要确认清楚。查看App Service启动日志
去App Service的「日志流」里查看容器启动过程的日志,有没有报错或者环境变量加载相关的提示。也可以在启动脚本里加一行printenv > /tmp/env.log,之后通过SSH查看/tmp/env.log,这里记录的是容器启动时的环境变量,比直接env命令更准确。排查「从部署包运行」选项
虽然Docker部署场景下这个选项一般不会生效,但还是可以去「配置→常规设置」里确认是否开启了「从部署包运行」,这个选项可能会干扰环境变量注入。
内容的提问来源于stack exchange,提问作者Zero

