为什么 docker-compose down 会删除我的卷?如何避免"向下"执行此操作。(Postgresql)



当我运行docker-compose down没有-v--volumes,为什么我的数据丢失?Docker会删除我的卷吗?
当我用docker volume inspect pgdata检查时,它总是显示当前时间戳,看起来每次都是重新创建的。

但是,当我刚刚用docker stop <container_id>停止postgres容器并重新运行容器时,数据仍然存在。这是我的docker-compose

version: '3.7'
services:
app:
container_name: bsf-quiz-app
image: sapkotasuren/bsf-quiz
ports:
- "443:8443"
depends_on:
- postgresqldb
postgresqldb:
image: postgres:latest
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=password
- POSTGRES_USER=postgres
- POSTGRES_DB=bsfQuiz

volumes:
pgdata:
<标题>更新20/01/2021 h1> 试图在绑定挂载方式上这样做,我看到很多数据正在创建,但仍然是相同的问题找不到我之前在数据库上创建的记录,在docker-compose down和up之后。

我也尝试使用docker命令创建命名卷:docker create volume postgres,并在我的yaml文件中提到它,并将external设置为true。还是同样的问题!

my yaml file:

version: '3.9'
services:
app:
container_name: bsf-quiz-app
image: sapkotasuren/bsf-quiz
ports:
- "443:8443"
depends_on:
- postgresqldb
postgresqldb:
container_name: postgres
image: postgres:latest
volumes:
- postgres:/var/lib/postgresql/data
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD=password
- POSTGRES_USER=postgres
- POSTGRES_DB=bsfQuiz
volumes:
postgres:
external: true

根据文档,docker compose down删除任何卷,除非使用了-v选项。

docker-compose的工作原理很简单。从他们的文档

停止容器并删除up创建的容器、网络、卷和映像。

因此命名卷是由docker-compose up创建的,因此当您关闭compose并再次启动它时,它将被删除。因此,要保留这些卷,有一个选项可以将卷直接指向一个文件夹,这样它就不再需要通过up命令创建,并且是永久性的。像这样:

volumes:
- /home/<username>/.pgdata:/var/lib/postgresql/data

更新:这是错误的。只需使用挂载选项(如上所述)来保持数据的持久性。

最新更新