使用Kubernetes部署Drupal时配置文件缺失问题求助
解决Kubernetes部署Drupal时的配置文件错误
核心问题根源
你的问题本质是initContainer未正确完成配置文件的复制与权限同步,导致主容器的Drupal站点目录下缺少必要的settings.php,同时default.settings.php的访问权限或路径不符合要求。
修正方案
1. 确保卷共享与路径正确性
首先要通过共享卷让initContainer和主容器共用/var/www/html/sites/default目录(Drupal官方镜像的默认站点根目录为/var/www/html),避免容器间文件隔离。
完整YAML配置示例(关键部分)
apiVersion: apps/v1 kind: Deployment metadata: name: drupal spec: replicas: 1 selector: matchLabels: app: drupal template: metadata: labels: app: drupal spec: volumes: - name: drupal-site-config emptyDir: {} # 生产环境建议替换为PersistentVolumeClaim initContainers: - name: init-drupal-config image: drupal:latest # 必须与主容器镜像版本一致 command: - /bin/sh - -c - | # 先校验镜像内默认配置文件是否存在 if [ -f /var/www/html/sites/default/default.settings.php ]; then # 复制生成settings.php cp /var/www/html/sites/default/default.settings.php /var/www/html/sites/default/settings.php # 设置Drupal运行所需的权限(www-data为容器内默认运行用户) chown -R www-data:www-data /var/www/html/sites/default chmod -R 755 /var/www/html/sites/default else echo "ERROR: default.settings.php not found in base image" exit 1 fi volumeMounts: - name: drupal-site-config mountPath: /var/www/html/sites/default containers: - name: drupal image: drupal:latest volumeMounts: - name: drupal-site-config mountPath: /var/www/html/sites/default ports: - containerPort: 80
2. 常见错误排查点
- 绝对路径替代相对路径:容器内必须使用
/var/www/html/sites/default绝对路径,不要用./sites/default,避免工作目录差异导致的路径错误。 - 镜像版本一致性:initContainer和主容器必须使用同版本Drupal镜像,不同版本的配置文件结构可能存在差异。
- 权限强制设置:Drupal运行用户为
www-data,必须确保sites/default目录及文件的所有者为该用户,否则安装流程无法写入配置。
3. 部署后验证
部署完成后,进入主容器校验文件状态:
# 替换为你的Drupal Pod名称 kubectl exec -it drupal-xxxx-xxxx -- /bin/bash # 检查文件是否存在 ls -l /var/www/html/sites/default/ # 检查权限是否正确 stat /var/www/html/sites/default/settings.php
如果输出显示default.settings.php和settings.php均存在,且所有者为www-data,则配置生效,重新访问localhost:8085即可继续Drupal安装流程。
内容的提问来源于stack exchange,提问作者Pedro Daniel Fernandez Guerrer
相关产品推荐
相关产品推荐

