我正在尝试将postgres数据保存在docker容器中,这样一旦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
救命?
根据Docker of Docker Compose,你写的东西如下:
volumes: - /var/lib/postgresql/data
它创建一个新的docker卷并将其映射到/var/lib/postgresql/data
容器内部.因此,每次运行docker-compose up
和docker-compose down
,它创建新卷.您可以使用确认行为docker volume ls
.
为避免这种情况,您有两种选择:
(A)将主机目录映射到容器中
您可以使用将主机目录映射到容器中
.
volumes: - /path/to/your/host/directory:/var/lib/postgresql/data
postgresql的数据将保存到/path/to/your/host/directory
容器主机中.
(B)使用外部容器
docker-compose有一个外部容器选项.当它设置为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的数据将保存到名为docker的卷中mypostgredb
.阅读参考了解更多细节.