微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgresql – 使用docker卷保留数据库

我正在尝试将postgres数据保存在docker容器中,以便在docker-compose down和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

救命?

解决方法

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

volumes:
  - /var/lib/postgresql/data

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

为避免这种情况,您有两种选择:

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

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

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

postgresql的数据将保存到容器主机的/ path / to / your / host /目录中.

(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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐