<p>I have a tomcat + postgres application that I test with docker-compose.  I am trying to package the application in a kubernetes config file.</p>

<p>For now, I am running kubernetes (and kubectl) using my Docker Desktop for Windows installation.  Eventually, I want to deploy to other environments.</p>

<p>I am currently trying to replicate some of the volume functionality in docker-compose within the following config file.</p>

<pre><code>apiVersion: v1
kind: Pod
metadata:
  name: pg-pod
spec:
  volumes:
  - name: "pgdata-vol"
    #emptyDir: {}
    hostPath:
      path: /c/temp/vols/pgdata
  containers:
  - image: postgres
    name: db
    ports:
    - containerPort: 5432
      name: http
      protocol: TCP
    volumeMounts:
    - mountPath: "/pgdata"
      name: "pgdata-vol"
    env:
    - name: PGDATA
      value: /pgdata
</code></pre>

<p>When postgres launches, I get see the following error.</p>

<pre><code>fixing permissions on existing directory /pgdata ... ok
creating subdirectories ... ok
selecting default max_connections ... 20
selecting default shared_buffers ... 400kB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
2019-07-26 20:43:41.844 UTC [78] FATAL:  data directory "/pgdata" has wrong ownership
2019-07-26 20:43:41.844 UTC [78] HINT:  The server must be started by the user that owns the data directory.
child process exited with exit code 1
initdb: removing contents of data directory "/pgdata"
running bootstrap script ...
</code></pre>

<p>I presume that I either need to provide some additional parameters to my volume definition or I need to try a different type of volume config (<strong>local</strong> vs <strong>hostPath</strong>).</p>

terrywb
<p>I found a partial solution to this issue.</p>

<p>Interestingly, if I assign a linux-style path as my host-path (on Windows), then my pgdata-vol persists until Docker Desktop is restarted.</p>

<p>Instead of mounting to a real windows location</p>

<pre><code>  volumes:
  - name: "pgdata-vol"
    hostPath:
      path: /c/temp/vols/pgdata
</code></pre>

<p>I use a "linux" location as my Windows hostPath</p>

<pre><code>  volumes:
  - name: "pgdata-vol"
    hostPath:
      path: /tmp/vols/pgdata
</code></pre>

<p>Curiously, I cannot actually find this path from Windows.  I presume this /tmp is local to my Docker Desktop instance.</p>

<p>This solution does not offer true persistence, but it has helped me to work around a roadblock that was impacting testing.</p>
