根据Docker Compose 的文档 https://docs.docker.com/compose/compose-file/#/volumes-volumedriver,当你写下类似这样的内容时:
volumes:
- /var/lib/postgresql/data
它创建一个新的 docker 卷并将其映射到/var/lib/postgresql/data
容器内。
因此,每次跑步时docker-compose up
and docker-compose down
,它创建新的卷。您可以通过以下方式确认该行为docker volume ls
.
为了避免这种情况,您有两种选择:
(A) 将主机目录映射到容器中
您可以使用将主机目录映射到容器中<HOST_PATH>:<CONTAINER_PATH>
.
volumes:
- /path/to/your/host/directory:/var/lib/postgresql/data
postgresql的数据将被保存到/path/to/your/host/directory
容器主机的。
(B) 使用外部容器
docker-compose 有一个选项外部容器 https://docs.docker.com/compose/compose-file/#external。
当它设置为 true 时,它不会总是创建卷。
这是一个例子。
version: '2'
services:
dbdata:
image: postgres:9.5.2
volumes:
- mypostgresdb:/var/lib/postgresql/data
volumes:
mypostgresdb:
external: true
With external: true
, docker-compose 不会创建mypostgredb
卷,因此您必须使用以下命令自己创建它:
docker volume create --name=mypostgredb
postgresql的数据将被保存到名为docker的卷中mypostgredb
. Read 参考 https://docs.docker.com/engine/reference/commandline/volume_create/了解更多详情。