代码之家  ›  专栏  ›  技术社区  ›  Meidan Alon

Postgres AWS EBS卷在更新服务时不存在

  •  0
  • Meidan Alon  · 技术社区  · 6 年前

    我在标准Docker上为AWS堆栈部署了一个服务(使用这个 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

    问题是我所更改的数据在更新后不会保持不变。 我注意到Postgresinitdb脚本在每次更新时都会运行,所以我假设它是相关的。

    我做错什么了吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Meidan Alon    6 年前

    问题是 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/ )。

    推荐文章