如何将创build的图像链接到docker-compose指定的命名卷?
我一直在尝试用户docker-compose启动一个postgres容器容器,一个持久的命名卷。
目标是让不同的postgres容器共享相同的持久化数据(不是同时发生的!) – 一个容器死亡或被杀死,另一个容器被占用,而不会丢失先前持久的数据。
据我所知,“命名卷”应该取代“数据卷容器”。 但是,到目前为止,两件事情中的任何一件都发生
- postgres容器无法启动,并显示错误消息“错误:容器命令未find或不存在”。
- 我只为那个特定的容器取得坚持。 如果它停下来,另一个容器开始,我们从一个空白的石板开始。
所以,就我所知,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
命令留下的状态) 。
一般来说,有几件事情:
- 不要在官方postgres映像中使用PGDATA环境选项
- 如果使用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
- elasticsearch 5.5.3 Java客户端API NoNodeAvailableException与docker
- 将魔术string部署到泊坞窗时,会将其设置为SPRING_CONFIG_NAME
- 在Docker中,Spring Boot集成testing失败,但不在外面
- 使用Docker和AWS ECS运行Spring Boot微服务
- Docker镜像和数据库服务器集成
- 在Docker容器中运行Spring Boot应用程序,无法连接MySQL
- 无法为弹簧引导configurationdocker和nginx
- Docker链接容器 – 环境variables不被显示
- 使用Intellij IDEA重新加载远程弹簧启动应用程序的例外