更新服务时Postgres AWS EBS卷不持久

时间:2018-06-21 20:54:00

标签: postgresql docker docker-swarm aws-ebs docker-aws

我在用于AWS堆栈的标准Docker上部署了服务(使用此template)。 我将docker stack deploy -c docker-compose.yml pos与该撰写文件一起部署:

version: "3.2"
services:
  postgres_vanilla:
    image: postgres
    volumes:
      - db-data:/var/lib/postgresql
volumes:
  db-data:
    driver: "cloudstor:aws"
    driver_opts:
      size: "6"
      ebstype: "gp2"
      backing: "relocatable"

然后我更改数据库中的一些数据,并用docker service update --force pos_postgres_vanilla强制更新服务

问题是我更改的数据在更新后不会持续存在。 我注意到每次更新时都会运行postgres initdb脚本,因此我认为它是相关的。

我在做错什么吗?

1 个答案:

答案 0 :(得分:0)

问题是cloudstor:aws创建了一个在其下带有lost+found的卷,因此,在postgres启动时,它发现数据目录不为空,并抱怨该目录。为了解决这个问题,我将卷更改为要挂载在数据目录上方的一个目录,位于/var/lib/postgresql,但是这导致postgres找不到PGVERSION文件,这反过来导致它在每次容器启动时都运行initdb({ {3}}。

因此,要解决此问题,而不是将数据目录挂载到数据目录上方的一个目录中,而是通过覆盖环境变量PGDATA(改为类似/var/lib/postgresql/data/db/)。