更新服务时,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/
)。
我在 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/
)。