postgresql - 使用 docker volumes 持久化数据库

标签 postgresql docker docker-compose

我正在尝试将 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 updocker-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/

相关文章:

windows - 在 Windows 上使用 docker compose 进行卷绑定(bind)

sql - 表中同一列的两条记录相减

sql - 更新许多特定行上的相同数据

docker - 嵌套的docker设置:子代公开父代

docker - 一个 Docker 容器可以管理其他 Docker 容器吗?

docker-compose - "./docker-compose.yml"中的版本不受支持。您可能会看到此错误,因为您使用了错误的 Compose 文件版本

postgresql - 如何将纯 SQL 文件转换为压缩的 pgdump 文件?

postgresql - 无法从临时表中删除?

docker - 惯用的 Makefile 和命令参数

docker - Spring Boot 尝试连接到 Mongo localhost