我有一个用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>
答案 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