docker:创建一个 mongodb 卷,在 docker-compose down 后仍然保存?
docker: create a mongodb volume that is still saved after docker-compose down?
我有以下 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
我的问题是,当我 运行 docker-compose down
我的 mongo 数据库中的所有数据都丢失了。
如何创建一个 mongo 卷,即使在 mongo 容器出现故障时仍然存在?
尝试为 MongoDb 容器更改 volumes
:
volumes:
- "./database:/data/db"
根据 image documentation the database volume needs to be /data/db
. This is also seen in the Dockerfile volume.
由于卷是在Dockerfile中定义的,如果你不在该目录创建卷,即使你在父目录中创建了一个卷,如/data
,docker也会创建一个匿名的/data/db
处的卷将在 docker volume ls
中显示为长 GUID 卷名称。根据容器的情况 运行,这些可能会被遗忘。
因此,解决方法是将您的卷安装调整到该路径:
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
请注意,除非您需要直接访问主机上的这些数据,否则我建议您改用命名卷。它包括有助于解决您可能遇到的主机卷权限问题的初始化步骤,特别是当 运行 直接在 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:
我有以下 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
我的问题是,当我 运行 docker-compose down
我的 mongo 数据库中的所有数据都丢失了。
如何创建一个 mongo 卷,即使在 mongo 容器出现故障时仍然存在?
尝试为 MongoDb 容器更改 volumes
:
volumes:
- "./database:/data/db"
根据 image documentation the database volume needs to be /data/db
. This is also seen in the Dockerfile volume.
由于卷是在Dockerfile中定义的,如果你不在该目录创建卷,即使你在父目录中创建了一个卷,如/data
,docker也会创建一个匿名的/data/db
处的卷将在 docker volume ls
中显示为长 GUID 卷名称。根据容器的情况 运行,这些可能会被遗忘。
因此,解决方法是将您的卷安装调整到该路径:
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
请注意,除非您需要直接访问主机上的这些数据,否则我建议您改用命名卷。它包括有助于解决您可能遇到的主机卷权限问题的初始化步骤,特别是当 运行 直接在 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: