我正在使用数据库docker-compose
启动spring
api postgres
。我是新手docker
,我正在尝试使用我创建的命名卷来持久化我的数据库
docker volume create employeedata
我将此卷添加到 my 中,docker-compose.yml
但如果我停止或删除我的容器,db 不会持续存在。
version: '3.8'
services:
app:
container_name: springboot-postgresql
image: springboot-postgresql
build: ./
ports:
- "8080:8080"
depends_on:
- postgresqldb
postgresqldb:
image: postgres
ports:
- "5432:5432"
volumes:
- employeedata:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=postgres
- POSTGRES_USER=postgres
- POSTGRES_DB=employeedb
volumes:
employeedata:
我尝试这样做docker inspect employeedata
并得到以下结果
对我来说,docker-compose
版本是 2 而不是 3似乎很可疑,而且我不明白挂载点与我在docker-compose.yml
上面指定的卷路径之间的关系
我很感激你的帮助
docker compose 在项目命名空间中创建了所有对象。此命名空间通常是 docker-compose.yml 文件的文件夹名称,但您可以通过将 --project-name 传递给(所有)您对 docker compose 的调用来设置它。
由于 docker 没有第一类命名空间,项目名称仅用作 compose 文件中定义的所有对象的前缀,因此在这种情况下,假设您的项目位于名为“project”的文件夹中,那么 compose 将创建project_app
为容器和project_employeedata
体积。
要覆盖它,您可以container-name
像之前一样指定一个显式。但是您真的不应该这样做,因为这意味着具有此名称的撰写文件的任何两个部署现在都会发生冲突。
并为卷覆盖它 - 告诉 docker compose 该卷是外部创建的并提供外部名称。否则 compose 将尝试使用命名空间名称。
volumes:
employeedata:
external: true
name: employeedata
同样,让 compose 管理卷名可能是更好的选择。只需确保托管撰写文件的目录具有合适的唯一名称 - 或确保通过 --project-name 传递合适的唯一名称,然后使用whatever_employeedata
.
备注 除非将 -v / --volumes 传递给 Docker compose,否则不会删除 compose 托管卷,docker compose down
因此您的数据将保留在此处。
/var/lib/docker/volumes
只是 docker 将管理卷的(默认)位置。
2.0 指的是 compose 的版本,而不是 compose.yml 文件中的版本。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句