【Docker】django+postgresql数据库数据卷挂载问题

1、问题出现

在学习数据库数据卷的挂载,这样可以对数据库数据进行备份,下次容器重启可以用以前的数据。
django项目单独一个容器,postgres数据库单独一个容器(直接用官方镜像)。在网上参考别人方案,看到docker镜像里postgres将数据放在该路径下/var/lib/postgresql/data

docker-compose.yml文件内容如下(省去了不相关的部分):

version: "3"

volumes: # 自定义数据卷,位于宿主机/var/lib/docker/volumes内
  db_vol:  # 定义数据卷同步数据库容器数据

services:
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: 'password'
      POSTGRES_USER: 'postgres'
      POSTGRES_DB: 'miniserver'
    volumes:
      - db_vol:/var/lib/postgresql/data/pgdata  #挂载数据库数据

使用docker-compose up启动,出现如下问题
initdb: error: directory "/var/lib/postgresql/data" exists but is not empty. If you want to create a new database system, either remove or empty the directory "/var/lib/postgresql/data" or run initdb with an argument other than "/var/lib/postgresql/data".

2、问题解决

添加PGDATA参数,并改变数据挂载路径,像我添加了一个任意命名的子文件夹,只要不用/var/lib/postgresql/data即可。
如果这样仍然报原来的错误或者还是出错,像我就遇到了。。请重新命名docker挂载的数据卷和挂载路径(就是把db_vol名字变了,/var/lib/postgresql/data/pgdata路径也变了),可能之前测试时有错误数据写入之类吧,我也不懂。

version: "3"

volumes:
  db_vol:

services:
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: 'password'
      POSTGRES_USER: 'postgres'
      POSTGRES_DB: 'miniserver'
      PGDATA: '/var/lib/postgresql/data/pgdata'
    volumes:
      - db_vol:/var/lib/postgresql/data/pgdata
      #- ./compose/postgres/data:/var/lib/postgresql/data/pgdata #挂载自定义路径的数据卷也可以

3、问题原因

其实找了很久,也不是很明白。因为直接搜错误,内网很少相关的,外网又看不太懂。之后其实是结合了内外网才碰巧弄出来的。
docker部署postgresql时,data目录不生效的问题探究提到:

挂载失败原因是官方镜像默认挂载了这个目录(/var/lib/postgresql/data)。所以解决办法就是,把自己的母机的data目录映射到容器里的其他目录,然后通过设置环境变量 PGDATA 为 容器里的新目录,即可。

官方文档中对PGDATA关键字的解释:没看懂,但感觉跟上面这个博主表达的好像也不是同一个意思。
外网讨论1
外网讨论2,其实也是在1的基础上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值