缺少对以下路径的写入权限:/var/www/html/pub/media

Missing write permissions to the following paths: /var/www/html/pub/media

kubectl -n magento logs magento-install-jssk6

我正在 Database found In ConfigModel.php line 166:Missing write permissions to the following paths: /var/www/html/pub/media 安装作业:

apiVersion: batch/v1
kind: Job
metadata:
  name: magento-install
  namespace: magento
spec:
  template:
    metadata:
      name: install
      labels:
        app: magento-install
        k8s-app: magento
    spec:
      containers:
      - name: magento-setup
        image: kiweeteam/magento2:vanilla-2.3.4-php7.3-fpm
        command: ["/bin/sh"]
        args:
        - -c
        - |
          /bin/bash <<'EOF'
          bin/install.sh
          php bin/magento setup:perf:generate-fixtures setup/performance-toolkit/profiles/ce/small.xml
          magerun index:list | awk '{print }' | tail -n+4 | xargs -I{} magerun index:set-mode schedule {}
          magerun cache:flush
          EOF
        envFrom:
        - configMapRef:
            name: config
        volumeMounts:
        - mountPath: /var/www/html/pub/media
          name: media
      volumes:
      - name: media
        persistentVolumeClaim:
          claimName: media
      restartPolicy: OnFailure

and when I try to change permissions I am getting chown: changing ownership of '/var/www/html/pub/media': Operation not permitted

这是因为您 运行 chown 作为 www-data 用户并且此目录的当前所有者是 root.

您可以通过使用 init container 运行 as root(用户 ID 0)来解决您的问题。您可以在下方看到 magento-install Job 的修改版本,其中已添加 init 容器

apiVersion: batch/v1
kind: Job
metadata:
  name: magento-install
  namespace: magento
spec:
  template:
    metadata:
      name: install
      labels:
        app: magento-install
        k8s-app: magento
    spec:
      initContainers:
      - name: magento-chown
        securityContext:
          runAsUser: 0
        image: kiweeteam/magento2:vanilla-2.3.4-php7.3-fpm
        command: ['sh', '-c', 'chown -R www-data:www-data /var/www/html/pub/media']
        volumeMounts:
        - name: media
          mountPath: "/var/www/html/pub/media"
      containers:
      - name: magento-setup
        image: kiweeteam/magento2:vanilla-2.3.4-php7.3-fpm
        command: ["/bin/sh"]
        args:
        - -c
        - |
          /bin/bash <<'EOF'
          bin/install.sh
          php bin/magento setup:perf:generate-fixtures setup/performance-toolkit/profiles/ce/small.xml
          magerun index:list | awk '{print }' | tail -n+4 | xargs -I{} magerun index:set-mode schedule {}
          magerun cache:flush
          EOF
        envFrom:
        - configMapRef:
            name: config
        volumeMounts:
        - mountPath: /var/www/html/pub/media
          name: media
      volumes:
      - name: media
        persistentVolumeClaim:
          claimName: media
      restartPolicy: OnFailure

一旦您使用以下方式附加到新创建的 Pod

kubectl exec -ti -n magento magento-install-z66qg -- /bin/bash

您会看到 /var/www/html/pub/media 目录的当前所有者不再是 root,而是 www-data 用户:

www-data@magento-install-z66qg:~/html$ ls -ld /var/www/html/pub/media
drwxr-xr-x 3 www-data www-data 4096 Jul 27 18:45 /var/www/html/pub/media

我们可以进一步简化它。 init 容器 甚至不需要使用 kiweeteam/magento2:vanilla-2.3.4-php7.3-fpm 图像。它也可能是一个基于 busybox 的简单容器,默认情况下 运行 与 root 相同,因此您可以省略上一个示例和 initContainers 部分中的安全上下文将如下所示:

initContainers:
- name: magento-chown
  image: busybox
  command: ['sh', '-c', 'chown -R www-data:www-data /var/www/html/pub/media']
  volumeMounts:
  - name: media

最终效果完全一样