Kubernetes(在Windows的Docker中)Postgres的卷配置

时间:2019-07-26 23:33:18

标签: kubernetes docker-volume

我有一个用docker-compose测试的tomcat + postgres应用程序。我正在尝试将应用程序打包到kubernetes配置文件中。

目前,我正在使用用于Windows的Docker桌面运行kubernetes(和kubectl)。最终,我想部署到其他环境。

我目前正在尝试在以下配置文件中复制docker-compose中的某些卷功能。

const serverTime = new Date('2019-06-20T14:26:58Z')
const currentTime = new Date()

console.log({
  serverTime: {
    milliseconds: serverTime.getTime(),
    toString: serverTime.toString()
  }
})

console.log({
  currentTime: {
    milliseconds: currentTime.getTime(),
    toString: currentTime.toString()
  }
})

console.log(serverTime.getTime() < currentTime.getTime())

postgres启动时,出现以下错误。

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

我认为我需要为卷定义提供一些其他参数,或者需要尝试其他类型的卷配置( local hostPath )。 / p>

3 个答案:

答案 0 :(得分:2)

这是Windows上Docker映像的已知问题。现在,无法将Windows目录正确地安装为卷。但是,您可以尝试通过使用持久性Docker卷来解决该问题。例如:

  db:
    image: postgres
    environment:
      - POSTGRES_USER=<user>
      - POSTGRES_PASSWORD=<pass>
      - POSTGRES_DB=<db_name>
    ports:
      - <ports>
    volumes:
      - pgdata:<path>
    networks:
    - <network>

volumes:
  pgdata:

更多信息:

请告诉我是否有帮助。

答案 1 :(得分:2)

我找到了解决此问题的部分方法。

有趣的是,如果我将linux风格的路径分配为主机路径(在Windows上),那么我的pgdata-vol会一直保留,直到重新启动Docker Desktop。

不是安装到真实的Windows位置

speak

我使用“ linux”位置作为Windows hostPath

  volumes:
  - name: "pgdata-vol"
    hostPath:
      path: /c/temp/vols/pgdata

奇怪的是,我实际上无法从Windows找到此路径。我认为这个/ tmp对于我的Docker Desktop实例是本地的。

此解决方案不能提供真正的持久性,但可以帮助我解决影响测试的障碍。

答案 2 :(得分:1)

您是否尝试过使用WSL? Windows的安装程序是Windows的WSL + Ubuntu + Docker,我可以正常安装卷。

我已经按照该教程配置了所有环境:

https://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawlessly