我一直在尝试使用docker-compose来启动postgres container容器,并使用一个持久的命名卷。
目标是让不同的postgres容器共享相同的持久化数据(不同时!) - 一个容器死亡或被杀死,另一个容器在不丢失先前持久化数据的情况下取而代之。
据我了解"命名卷"应该取代" Data Volume Containers"。 但是,到目前为止,要么发生以下两种情况之一:
因此,据我所知,postgres图像确实创建了自己的卷,当然这个卷必然绑定到特定的容器。如果我可以通过命名卷获得该别名或链接或某些内容,那就没问题了。
docker-compose.yml的当前化身:
version: '2'
services:
db:
image: postgres
restart: allways
volumes:
- myappdb:/var/lib/postgresql/data/
environment:
- POSTGRES_PASSWORD=mysecretpasswordPleaseChangeME
volumes:
myappdb:
driver: local
我做了一些愚蠢的错误,还是尝试了一些根本不支持的东西?
答案 0 :(得分:2)
好的,经过大量的反复试验后,事情正在按原样运行(意味着我可以运行docker-compose down
然后docker-compose up
,我的数据处于剩下的状态使用down
命令。)
一般来说,有一些事情:
environment
选项传递给链接到数据库容器的服务,请不要将配置文件名称用双引号括起来。它按原样传递给Spring,导致不存在的配置文件用作活动配置文件。我最初错误地配置了一些微妙和奇怪的东西,但我怀疑杀手是上面的第2点 - 它导致我的应用程序,当在容器中运行时,使用in-mem H2数据库而不是链接的容器数据库。所以一切都(几乎)完美地运行 - 直到容器关闭。而且,当从IDE运行时,针对容器DB(端口暴露给主机),所有工作都完美(包括持久性),因为在IDE启动器中正确设置了活动配置文件参数(无引号!)。
生活和学习我猜(但我觉得我的脸上有很多鸡蛋)。
答案 1 :(得分:0)
您需要告诉Compose它应该管理卷的创建,否则它假定它应该已经存在于主机上。
volumes:
myappdb:
external: false