我在用于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脚本,因此我认为它是相关的。
我在做错什么吗?
答案 0 :(得分:0)
问题是cloudstor:aws
创建了一个在其下带有lost+found
的卷,因此,在postgres启动时,它发现数据目录不为空,并抱怨该目录。为了解决这个问题,我将卷更改为要挂载在数据目录上方的一个目录,位于/var/lib/postgresql
,但是这导致postgres找不到PGVERSION文件,这反过来导致它在每次容器启动时都运行initdb({ {3}}。
因此,要解决此问题,而不是将数据目录挂载到数据目录上方的一个目录中,而是通过覆盖环境变量PGDATA
(改为类似/var/lib/postgresql/data/db/
)。