如何将创build的图像链接到docker-compose指定的命名卷?

我一直在尝试用户docker-compose启动一个postgres容器容器,一个持久的命名卷。

目标是让不同的postgres容器共享相同的持久化数据(不是同时发生的!) – 一个容器死亡或被杀死,另一个容器被占用,而不会丢失先前持久的数据。

据我所知,“命名卷”应该取代“数据卷容器”。 但是,到目前为止,两件事情中的任何一件都发生

  1. postgres容器无法启动,并显示错误消息“错误:容器命令未find或不存在”。
  2. 我只为那个特定的容器取得坚持。 如果它停下来,另一个容器开始,我们从一个空白的石板开始。

所以,就我所知,postgres映像确实创build了它自己的卷,这当然是绑定到特定的容器上的。 这将是很好,如果我可以得到这个卷别名或链接或与指定的卷。

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 

我是在做一些愚蠢的错误,还是尝试一些根本不支持的东西?

  • Docker版本1.10.3,编译20f81dd
  • docker-compose 1.6.0版,build d99cad6

好吧,经过大量的试验和错误之后,事情现在正在按照他们应该的方式工作(这意味着我可以运行docker-compose down ,然后docker-compose up并且我的数据处于使用down命令留下的状态) 。

一般来说,有几件事情:

  1. 不要在官方postgres映像中使用PGDATA环境选项
  2. 如果使用spring引导(像我一样)和docker撰写(像我一样),并将environment选项传递给链接到数据库容器的服务,请不要使用双引号包assembly置文件名称。 它按原样传递给Spring,导致不存在的configuration文件被用作活动configuration文件。

我有一些微妙和奇怪的事情最初configuration错误,但我怀疑杀手是上面的第2点 – 它导致我的应用程序,当在一个容器中运行,使用内存H2数据库,而不是链接的容器数据库。 所以一切都运行(几乎)完美 – 直到容器closures。 而且,当从IDE运行时,针对容器DB(端口暴露给主机),由于在IDE启动器(NO引号!)中正确设置了活动configuration文件参数,因此所有工作都很完美(包括持久性)。

我想,生活和学习(但我确实感到我的脸上有很多鸡蛋)。

您需要告诉Compose它应该pipe理Volume的创build,否则它会假定它已经存在于主机上。

 volumes: myappdb: external: false 

文档: https : //docs.docker.com/compose/compose-file/#external