jav*_*900 2 persistence mongodb docker docker-compose docker-volume
我有以下docker-compose.yml文件:
version: "3"
services:
pokerstats:
image: pokerstats
container_name: pokerstats
ports:
- 8080:8080
depends_on:
- db
db:
image: mongo
container_name: mongo
volumes:
- ./database:/data
ports:
- "27018:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: admin
MONGO_INITDB_DATABASE: pokerstats
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我运行docker-compose downmongo 数据库中的所有数据都会丢失。
如何创建即使 mongo 容器出现故障也能持续存在的 mongo 卷?
根据图像文档,数据库卷需要为/data/db. 这也可以在Dockerfile 卷中看到。
由于卷是在 Dockerfile 中定义的,如果您不在该目录中创建卷,即使您在父目录中创建了卷(如 )/data,docker 也会创建一个匿名卷,/data/db该卷将在 中显示为长 guid 卷名称docker volume ls。根据容器的运行方式,这些可能会被留下。
因此,修复方法是将卷挂载调整到该路径:
version: "3"
services:
pokerstats:
image: pokerstats
container_name: pokerstats
ports:
- 8080:8080
depends_on:
- db
db:
image: mongo
container_name: mongo
volumes:
- ./database:/data/db
ports:
- "27018:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: admin
MONGO_INITDB_DATABASE: pokerstats
Run Code Online (Sandbox Code Playgroud)
请注意,除非您需要直接访问主机上的此数据,否则我建议您使用命名卷。它包括初始化步骤,可帮助您解决主机卷可能遇到的权限问题,特别是直接在 Linux 主机上运行时。
要使用命名卷,如下所示:
version: "3"
services:
pokerstats:
image: pokerstats
container_name: pokerstats
ports:
- 8080:8080
depends_on:
- db
db:
image: mongo
container_name: mongo
volumes:
- dbdata:/data/db
ports:
- "27018:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: admin
MONGO_INITDB_DATABASE: pokerstats
volumes:
dbdata:
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5171 次 |
| 最近记录: |