0

我在标准 Docker for AWS 堆栈上部署了一项服务(使用此模板)。docker stack deploy -c docker-compose.yml pos我使用这个 compose 文件进行部署:

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

有什么我做错了吗?

4

1 回答 1

0

问题是在它下面cloudstor:aws创建卷lost+found,所以当 postgres 启动时它发现数据目录不为空并抱怨它。为了解决这个问题,我将卷更改为安装在数据目录上方的一个目录 at /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/)将数据目录更改为卷挂载之下的一级。

于 2018-06-24T21:12:24.487 回答