我试图在poster容器中保留postgres数据,这样一旦docker-compose down and docker-compose up -d
你就不会丢失上次会话中的数据。我无法做任何事情 - 将容器拉下来并再次备份会定期删除数据。
这是我目前的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
帮助?
答案 0 :(得分:8)
根据Dockment of Docker Compose,当您写下以下内容时:
volumes:
- /var/lib/postgresql/data
它会创建一个新的docker卷并将其映射到容器内的/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卷中。请阅读reference了解更多详情。