Search code examples
wordpressdockerkuberneteswindows-subsystem-for-linuxbitnami

Docker Desktop Kubernetes Windows PV Non Root Container


I'm trying to get Wordpress running with a shared volume for wp-config.php across replicas. I'm developing my manifest on Docker Desktop for Windows on top of the Ubuntu WSL v2. I've enabled the Kubernetes functionality of Docker Desktop, which seems to be working fine with the exception of PersistentVolume resx's. Here are the relevant snippets from my manifest:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0
  namespace: yuknis-com
spec:
  capacity:
    storage: 60Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteMany
  storageClassName: local-storage
  local:
    path: /c/Users/Kirkland/pv0
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - "docker-desktop"
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  labels:
    app: pvc0
  name: wordpress-pvc
  namespace: yuknis-com
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 60Gi
  storageClassName: local-storage
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
  namespace: yuknis-com
  labels:
    app: wordpress
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wordpress
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      volumes:
      - name: wordpress
        persistentVolumeClaim:
          claimName: wordpress-pvc
      initContainers:
      - name: volume-permissions
        image: busybox
        command: ['sh', '-c', 'chmod -R g+rwX /bitnami']
        volumeMounts:
        - mountPath: /bitnami
          name: wordpress
      containers:
      - name: wordpress
        image: yuknis/wordpress-nginx-phpredis:latest
        envFrom:
        - configMapRef: 
            name: wordpress
        volumeMounts:
        - name: wordpress
          mountPath: /bitnami
        ports:
        - containerPort: 8080
          protocol: TCP
        - containerPort: 8443
          protocol: TCP

When I try to run my application on MacOS, it works fine with the above. However when I try to run it on Windows, it fails on the initContainer portion with an error of:

chmod: /bitnami: Operation not permitted
chmod: /bitnami: Operation not permitted

Why might this work on MacOS, but not on Windows on top of the WSL? Any ideas?


Solution

  • There is a known issue. Docker Desktop has its own WSL distribution, so you can't access it from the same root.

    Workaround for this issue is to change path in your PV:

    spec:
      capacity:
        storage: 60Gi
      volumeMode: Filesystem
      accessModes:
      - ReadWriteMany
      storageClassName: hostpath
      local:
        path: /run/desktop/mnt/host/c/Users/Kirkland/pv0
    

    Check the github post I linked for considerations using this method.