使用 docker 卷持久化数据库

2024-05-03

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

Help?


根据Docker Compose 的文档 https://docs.docker.com/compose/compose-file/#/volumes-volumedriver,当你写下类似这样的内容时:

volumes:
  - /var/lib/postgresql/data

它创建一个新的 docker 卷并将其映射到/var/lib/postgresql/data容器内。 因此,每次跑步时docker-compose up and 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 有一个选项外部容器 https://docs.docker.com/compose/compose-file/#external。 当它设置为 true 时,它​​不会总是创建卷。 这是一个例子。

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

With external: true, docker-compose 不会创建mypostgredb卷,因此您必须使用以下命令自己创建它:

docker volume create --name=mypostgredb

postgresql的数据将被保存到名为docker的卷中mypostgredb. Read 参考 https://docs.docker.com/engine/reference/commandline/volume_create/了解更多详情。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 docker 卷持久化数据库 的相关文章

随机推荐