gpt4 book ai didi

docker - 如何将镜像创建的卷与 docker-compose 指定的命名卷链接起来?

转载 作者:行者123 更新时间:2023-12-02 06:32:58 27 4
gpt4 key购买 nike

我一直在尝试使用 docker-compose 来启动 postgres container容器,具有单个持久命名卷。

目标是让不同的 postgres 容器共享相同的持久数据(不是同时!) - 一个容器死亡或被杀死,另一个容器取代它,而不会丢失以前的持久数据。

据我了解,“命名卷”应该取代“数据卷容器”。但是,到目前为止,发生了以下两种情况之一:

  1. postgres 容器启动失败,并显示错误消息“错误:容器命令未找到或不存在。”
  2. 我仅实现了该特定容器的持久性。如果它被停止并删除并且另一个容器启动,我们将从一张白纸开始。

据我了解,postgres 镜像确实创建了自己的卷,它当然绑定(bind)到该特定容器。如果我可以为该卷添加别名或链接或具有指定卷的内容,那就太好了。

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,构建d99cad6

最佳答案

好的,经过大量的试验和错误,现在一切正常(这意味着我可以运行 docker-compose down ,然后运行 ​​docker-compose up ) > 并且我的数据处于使用 down 命令留下的状态。

总的来说,有以下几点:

  1. 请勿将 PGDATA 环境选项与官方 postgres image 一起使用
  2. 如果使用 spring boot(就像我一样)和 docker compose(就像我一样)并将 environment 选项传递给链接到数据库容器的服务,请勿将配置文件名称用双引号引起来。它按原样传递给 Spring,从而导致将不存在的配置文件用作事件配置文件。

我最初配置了一些微妙而奇怪的事情,但我怀疑 killer 是上面的第 2 点 - 它导致我的应用程序在容器中运行时使用内存中的 H2 数据库而不是链接的容器数据库。所以一切都(几乎)完美地运行 - 直到容器关闭。而且,当从 IDE 运行时,针对容器数据库(端口暴露给主机),所有操作都完美运行(包括持久性),因为事件配置文件参数已在 IDE 启动器中正确设置(无引号!)。

生活和学习我猜(但我确实感觉脸上有很多鸡蛋)。

关于docker - 如何将镜像创建的卷与 docker-compose 指定的命名卷链接起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36245276/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com