更新服务时,Postgres AWS EBS 卷不会保留

Postgres AWS EBS volume doesn't persist when updating service

我在 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 脚本,所以我认为它是相关的。

我做错了什么吗?

问题是 cloudstor:aws 创建的卷下面有一个 lost+found,所以当 postgres 启动时它发现数据目录不为空并抱怨它。为了解决这个问题,我更改了要挂载到数据目录上方一个目录的卷,在 /var/lib/postgresql,但这导致 postgres 找不到 PGVERSION 文件,这反过来又导致它每次 运行 initdb容器启动 (https://github.com/docker-library/postgres/blob/master/11/docker-entrypoint.sh#L57).

因此,为了解决这个问题,我没有更改要挂载到数据目录上方一级目录的卷,而是通过覆盖环境变量 PGDATA(以类似于 /var/lib/postgresql/data/db/)。