【问题标题】:Nginx fpm Laravel container inside kubernetes not picking up the environment variablesKubernetes 内的 Nginx fpm Laravel 容器未获取环境变量
【发布时间】:2021-04-15 23:16:58
【问题描述】:

我有一个使用自定义 nginx + php-fpm docker 镜像构建的 laravel docker 容器。

我已经成功部署到k8s集群并且可以正常访问,也可以登录pod运行env我可以看到我的k8s中所有的环境变量都设置成功了configmap

在 laravel 代码中,我读取了这样的环境变量: 例如SomeController.php 有以下代码:

$apiCode = env('API_CODE');
// also tried like this $apiCode = getenv('API_CODE'); still not successful in fetching

我的问题和这个问题是,即使在使用env 命令的 pod 内,环境变量总是在 php 代码中读取为空,我可以看到它们已正确设置,但 php 代码无法找到它们。

(我没有缓存 laravel 配置,所以我们可以排除这种情况,也尝试使用命令 php artisan config:clear 事先,仍然相同的结果无法获取 php 中的环境变量)

在 kubernetes 定义 yml 中,我将 configmap 附加到 env 变量,如下所示,并看到它们在 pod 中正确定义:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api
  labels:
    tier: api
spec:
  replicas: 1
  selector:
    matchLabels:
      tier: api
  template:
    metadata:
      labels:
        tier: api
    spec:
      containers:
        - name: api
          image: somenging-fpm-image:latest
          ports:
            - containerPort: 80
          envFrom:
            - configMapRef:
                name: api-config-env-file

目前我很迷茫,不知道为什么会发生这种情况。

我最初认为 configmap 可能是在 pod 启动后创建的(php fpm 以某种方式处理然后没有选择启动 env)

为了验证和排除这种情况,我销毁了 pod 并重新创建了 deployment+pod 以使用已经存在的 configmap,但结果仍然是相同的 php 没有获取 pod 中存在的 env var

我可以通过kubectl exec -it [podnamehere] /bin/bash 登录到 pod 并在那里运行env,并且可以看到从我的配置映射api-config-env-file 正确设置的环境变量,但代码总是让它们为空,无法读取它们

【问题讨论】:

    标签: php laravel nginx kubernetes environment-variables


    【解决方案1】:

    我只有在有redis或缓存系统时才遇到这个问题。

    但是你已经说过了

    (我没有缓存 laravel 配置,以便我们可以排除这种情况,也尝试使用命令 php artisan config:clear 事先,仍然相同的结果无法获取 php 中的环境变量)

    因此,请仔细检查您是否运行任何类似php artisan optimize 的命令。它将缓存保存到 redis,laravel 应用程序将从那里选择设置。

    只是为了确保你不会错过任何东西。

    尝试: php artisan optimize:clear

    此命令将执行以下操作:

    Cached events cleared!
    Compiled views cleared!
    Application cache cleared!
    Route cache cleared!
    Configuration cache cleared!
    Compiled services and packages files removed!
    Caches cleared successfully!
    

    【讨论】:

      猜你喜欢
      • 2018-06-13
      • 2017-10-15
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      • 2020-03-30
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      相关资源
      最近更新 更多