[英]Nginx fpm Laravel container inside kubernetes not picking up the environment variables
我有一個 laravel docker 容器,它是用自定義 nginx + php-fpm Z05B60563C41A2BDAFED46AFCB3053C41A2BDAFED74Z 構建的容器
我已成功部署到 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 vars 在 php 代碼中總是被讀取為空,即使在使用env
命令的 pod 內我可以看到它們正確設置,不知何故 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 中存在的環境變量
我可以通過kubectl exec -it [podnamehere] /bin/bash
登錄到 pod 並在那里運行env
並且可以看到從我的 configmap api-config-env-file
正確設置的 env vars,但是代碼總是讓它們為空不能閱讀它們
我只有在有redis
或緩存系統時才遇到這個問題。
但是你已經 state 那
(我沒有緩存 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!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.