【问题标题】:Missing write permissions to the following paths: /var/www/html/pub/media缺少对以下路径的写入权限:/var/www/html/pub/media
【发布时间】:2020-07-24 09:02:16
【问题描述】:
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 $2}' | 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

【问题讨论】:

  • 路径 /var/www/html/pub/media 的权限是什么?
  • drwxr-xr-x 3 root root 4096 Jul 24 08:25 。 drwxr-xr-x 1 www-data www-data 20 Feb 28 13:32 .. drwx------ 2 root root 16384 Jul 24 08:25 lost+found
  • 当我尝试更改权限时,我得到了 chown:更改 '/var/www/html/pub/media' 的所有权:不允许操作
  • 运行magento-setup CMD 的用户是什么?您需要在本地将/var/www/html/pub/media 的权限更改为在容器内运行的用户的uid/gid。
  • 我不知道如何找到它...我正在拉图像 docker 注册表并且无权访问 dockerfile

标签: docker magento kubernetes kubernetes-pod


【解决方案1】:

当我尝试更改权限时,我得到了 chown:正在更改 '/var/www/html/pub/media' 的所有权:不允许操作

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

您可以使用init containerroot 运行(用户ID 为0)来解决您的问题。您可以在下面看到已添加 init 容器magento-install Job 的修改版本:

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 $2}' | 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

最终效果会完全一样。

【讨论】:

    猜你喜欢
    • 2018-03-25
    • 2019-05-17
    • 2012-09-06
    • 1970-01-01
    • 2014-09-17
    • 2012-01-18
    • 2018-04-06
    • 2014-10-01
    • 2014-03-14
    相关资源
    最近更新 更多