Volume mounts not working Kubernetes and WSL 2 and Docker
According to the following thread, hostPath volumes are not officially supported for wsl2, yet. They do suggest a workaround, though I had trouble getting it to work. I have found that prepending /run/desktop/mnt/host/c
seems to work for me.
// C:\someDir\volumeDirhostPath: path: /run/desktop/mnt/host/c/someDir/volumeDir type: DirectoryOrCreate
Thread Source: https://github.com/docker/for-win/issues/5325
Suggested workaround from thread: https://github.com/docker/for-win/issues/5325#issuecomment-567594291
Using @RyanDarnell's excellent answer above, here is what worked for me
Objective: get message-db with password using docker build --secret
running in local docker-desktop kubernetes with StatefulSet and StorageClass using Skaffold
$kubectl get nodes -o wideNAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIMEdocker-desktop Ready control-plane,master 21h v1.21.1 <internalip> <none> Docker Desktop 5.4.72-microsoft-standard-WSL2 docker://20.10.7
#./k8s/storage-class.yamlapiVersion: storage.k8s.io/v1kind: StorageClassmetadata: name: local-storage labels: app: postgres-databaseprovisioner: kubernetes.io/no-provisionervolumeBindingMode: WaitForFirstConsumerreclaimPolicy: Delete
#./k8s/persistent-volume.yamlapiVersion: v1kind: PersistentVolumemetadata: name: local-pv1 labels: app: postgres-databasespec: capacity: storage: 128Mi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: local-storage local: path: /run/desktop/mnt/host/c/kubernetes-mount-path # created this folder at C:\kubernetes-mount-path nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - docker-desktop
#./k8s/stateful-set.yamlapiVersion: apps/v1kind: StatefulSetmetadata: name: postgres-databasespec: selector: matchLabels: app: postgres-database serviceName: postgres-service replicas: 1 template: metadata: labels: app: postgres-database spec: containers: - name: message-db-container image: message-db-test volumeMounts: - name: postgres-disk mountPath: /var/lib/postgresql/data env: - name: PGDATA value: /var/lib/postgresql/data/pgdata - name: POSTGRES_PASSWORD value: <postgres-password> volumeClaimTemplates: - metadata: name: postgres-disk labels: app: postgres-database spec: selector: matchLabels: app: postgres-database storageClassName: local-storage accessModes: - ReadWriteOnce resources: requests: storage: 128Mi
#./k8s/service.yamlapiVersion: v1kind: Servicemetadata: name: postgres-loadbalancerspec: selector: app: postgres-database type: LoadBalancer ports: - port: 5432 targetPort: 5432
#./Dockerfile# syntax = docker/dockerfile:1.3FROM postgres:13.3-alpine3.14RUN apk add --no-cache curl tarRUN mkdir -p /usr/src/eventide \ && curl -L https://github.com/message-db/message-db/tarball/v1.2.6 -o /usr/src/eventide/message-db.tgzRUN tar -xf /usr/src/eventide/message-db.tgz --directory /usr/src/eventide# change message_store login passwordRUN --mount=type=secret,id=message-db-pass sed -i "s/WITH LOGIN/WITH LOGIN ENCRYPTED PASSWORD '$(cat /run/secrets/message-db-pass)'/g" /usr/src/eventide/message-db-message-db-759a4f3/database/roles/message-store.sqlRUN echo -e "#!/bin/sh\ncd /usr/src/eventide/message-db-message-db-759a4f3/database\n./install.sh" > /docker-entrypoint-initdb.d/rundbscripts.sh RUN docker-entrypoint.sh postgres --versionENTRYPOINT docker-entrypoint.sh postgres
#./secret.txt<postgres-password>
#./skaffold.yamlkind: ConfigapiVersion: skaffold/v2beta20build: artifacts: - image: message-db-test context: . docker: secret: id: message-db-pass src: secret.txt local: useBuildkit: truedeploy: kubectl: manifests: - k8s/*.yaml
run skaffold debug -v debug
to startup