我正在尝试将 postgres 数据保存在 docker 容器中,这样一旦您 docker-compose down 和 docker-compose up -d
就不会丢失之前 session 的数据。我无法让它做很多事情 - 拉下容器并再次备份通常会删除数据。
这是我当前的 docker-compose.yml:
version: '2'
services:
api:
build: .
ports:
- '8245:8245'
volumes:
- .:/home/app/api
- /home/app/api/node_modules
- /home/app/api/public/src/bower_components
links:
- db
db:
build: ./database
env_file: .env
ports:
- '8246:5432'
volumes_from:
- dbdata
dbdata:
image: "postgres:9.5.2"
volumes:
- /var/lib/postgresql/data
帮忙吗?
最佳答案
根据Dockment of Docker Compose , 当你写这样的东西时:
volumes:
- /var/lib/postgresql/data
它创建一个新的 docker volume 并将其映射到 /var/lib/postgresql/data
在容器内。
因此,每次运行 docker-compose up
和 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 有一个选项 external container . 当它设置为 true 时,它不会总是创建卷。 这是一个例子。
version: '2'
services:
dbdata:
image: postgres:9.5.2
volumes:
- mypostgresdb:/var/lib/postgresql/data
volumes:
mypostgresdb:
external: true
与 external: true
, docker-compose 不会创建 mypostgredb
卷,因此您必须使用以下命令自行创建它:
docker volume create --name=mypostgredb
postgresql 的数据将保存到名为mypostgredb
的docker volume 中.阅读reference了解更多详情。
关于postgresql - 使用 docker volumes 持久化数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41603505/