使用docker卷保持数据库

我试图在docker容器中保存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 

帮帮我?

根据Docker Compose的Dockment ,当你写下如下的东西:

 volumes: - /var/lib/postgresql/data 

它创build一个新的docker卷并将其映射到容器内的/var/lib/postgresql/data 。 因此,每次运行docker-compose updocker-compose down ,都会创build新的卷。 您可以使用docker volume ls来确认行为。

为了避免它,你有两个select:

(A)将主机目录映射到容器

您可以使用<HOST_PATH>:<CONTAINER_PATH>将主机的目录映射到容器中。

 volumes: - /path/to/your/host/directory:/var/lib/postgresql/data 

postgresql的数据将被保存到容器主机的/path/to/your/host/directory中。

(B)使用外部容器

docker-compose有一个外部容器的选项。 当它被设置为true时,它不会总是创build音量。 这是一个例子。

 version: '2' services: dbdata: image: postgres:9.5.2 volumes: - mypostgresdb:/var/lib/postgresql/data volumes: mypostgresdb: external: true 

有了external: truemypostgredb -compose将不会创buildmypostgredb卷,因此您必须使用以下命令自行创build它:

 docker volume create --name=mypostgredb 

postgresql的数据将被保存到名为mypostgredb卷中。 阅读参考了解更多细节。