我在AWS堆栈的标准Docker上部署了一个服务(使用这个模板)。我使用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"然后,我在db中更改了一些数据,并强制使用docker service update --force pos_postgres_vanilla更新服务。
问题是,我更改的数据在更新后不会持久。我注意到postgres initdb脚本每次更新时都会运行,所以我假设它是相关的。
我做错什么了吗?
发布于 2018-06-24 21:12:24
问题是cloudstor:aws在它下面创建了一个带有lost+found的卷,所以当postgres启动时,它会发现数据目录不是空的,并抱怨它。为了解决这个问题,我更改了要挂载在/var/lib/postgresql数据目录之上的一个目录,但这导致postgres找不到PGVERSION文件,这反过来又导致它在容器每次启动(https://github.com/docker-library/postgres/blob/master/11/docker-entrypoint.sh#L57)时运行initdb。
因此,为了解决这个问题,我没有将要挂载的卷更改为数据目录之上的一个目录,而是通过重写环境变量PGDATA (类似于/var/lib/postgresql/data/db/),将数据目录更改为比卷挂载低一级。
https://stackoverflow.com/questions/50977278
复制相似问题