Docker Community Forums

Share and learn in the Docker community.

How to mount hostPath using docker-for-mac + kubernetes


(Mike Bannister) #1

I would like to use a ‘hostPath’ volume so that I can develop an app inside of kubernetes while making changes to the code on my host filesystem. Minikube makes /Users available inside it’s VM but I’m unsure what the analog is for docker containers inside kubernetes inside docker-for-mac. Thanks in advance!


(Cartmanume) #2

Have a look at File Sharing under Preferences. There you can see the shared folders.
Example for volume, assuming /tmp is in the shared folders.

      volumes:
      - name: hostvolume
        hostPath:
          path: /tmp/folder_to_mount

(Karol Jastrzębowski) #3

Is there a nicer than envvar substitution way to overcome absolute paths restriction for mounted folders?


(Mike Bannister) #4

/tmp seems to work but not /Users even though it’s also included in the docker for mac shares (by default, note I reset to factory before doing this):

mike@shazzz
∴ echo text-in-temp-dir > /tmp/text-in-temp-dir.txt
mike@shazzz
∴ echo text-in-home-dir > /Users/mike/text-in-home-dir.txt
mike@shazzz
∴ cat /tmp/text-in-temp-dir.txt
text-in-temp-dir
mike@shazzz
∴ cat /Users/mike/text-in-home-dir.txt
text-in-home-dir
mike@shazzz
∴ cat /tmp/test-pod.yml
apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /tmp-volume
      name: tmp-volume
    - mountPath: /home-volume
      name: home-volume
  volumes:
  - name: tmp-volume
    hostPath:
      path: /tmp
      type: Directory
  - name: home-volume
    hostPath:
      path: /Users/mike
      type: Directory
mike@shazzz
∴ kubectl apply -f /tmp/test-pod.yml
pod "test-pd" created
mike@shazzz
∴ kubectl get pods --show-all
NAME      READY     STATUS              RESTARTS   AGE
test-pd   0/1       ContainerCreating   0          12s
mike@shazzz
∴ kubectl describe po/test-pd
Name:         test-pd
Namespace:    default
Node:         docker-for-desktop/192.168.65.3
Start Time:   Sat, 10 Feb 2018 16:22:06 -0500
Labels:       <none>
Annotations:  kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"name":"test-pd","namespace":"default"},"spec":{"containers":[{"image":"k8s.gcr.io/test-we...
Status:       Pending
IP:
Containers:
  test-container:
    Container ID:
    Image:          k8s.gcr.io/test-webserver
    Image ID:
    Port:           <none>
    State:          Waiting
      Reason:       ContainerCreating
    Ready:          False
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /home-volume from home-volume (rw)
      /tmp-volume from tmp-volume (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-prgn9 (ro)
Conditions:
  Type           Status
  Initialized    True
  Ready          False
  PodScheduled   True
Volumes:
  tmp-volume:
    Type:  HostPath (bare host directory volume)
    Path:  /tmp
  home-volume:
    Type:  HostPath (bare host directory volume)
    Path:  /Users/mike
  default-token-prgn9:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-prgn9
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason                 Age                From                         Message
  ----     ------                 ----               ----                         -------
  Normal   Scheduled              52s                default-scheduler            Successfully assigned test-pd to docker-for-desktop
  Normal   SuccessfulMountVolume  52s                kubelet, docker-for-desktop  MountVolume.SetUp succeeded for volume "tmp-volume"
  Normal   SuccessfulMountVolume  51s                kubelet, docker-for-desktop  MountVolume.SetUp succeeded for volume "default-token-prgn9"
  Warning  FailedMount            20s (x7 over 52s)  kubelet, docker-for-desktop  MountVolume.SetUp failed for volume "home-volume" : hostPath type check failed: /Users/mike is not a directory

(Cartmanume) #5

Do /Users work if you remove the type for that volume? I have it working but I have nothing on the type…


(Mike Bannister) #6

Works perfectly. I definitely tried that but must have had something else wrong at the time. Thanks so much!