docker容器中的timescaledb数据持久化

wbrvyc0a  于 2023-05-16  发布在  Docker
关注(0)|答案(1)|浏览(252)

我可以使用Docker compose脚本运行timescaledb数据库:

version: "3.9"
services:
  timescaledb:
    image: timescale/timescaledb:latest-pg12
    restart: always
    ports:
      - 5432:5432
    environment:
      TIMESCALEDB_TELEMETRY: off
      POSTGRES_USER: timescaledb
      POSTGRES_PASSWORD: password

然而,存储在这里的数据不是持久性的。所以当我重置电脑时,我就失去了一切。我试图通过将/var/lib/postgresql/data文件夹Map到我本地驱动器上的某个东西(在windows操作系统上)来使卷持久化。

version: "3.9"
services:
  timescaledb:
    image: timescale/timescaledb:latest-pg12
    restart: always
    ports:
      - 5432:5432
    environment:
      TIMESCALEDB_TELEMETRY: off
      POSTGRES_USER: timescaledb
      POSTGRES_PASSWORD: password
    volumes:
      - postgresdata:/var/lib/postgresql/data
volumes:
  postgresdata:
    external: false
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: '/data/db-data'

我得到的错误虽然
“initdb:错误:目录“/var/lib/postgresql/data”存在但不为空如果要创建新的数据库系统,请删除或清空目录“/var/lib/postgresql/data”,或者使用“/var/lib/postgresql/data”以外的参数运行initdb
我可以看到(当我用非持久化数据运行容器的第一种方式时)在/var/lib/postgresql/data中包含了很多postgres文件。那么我的猜测是,在构建阶段/var/lib/postgresql/data被创建,并且我的volumes语句不允许覆盖所有这些数据。我不确定克服这一点的最佳方法。
那么,我如何让Docker compose与存储在主机上的卷协作呢?

voase2hg

voase2hg1#

使用体积Map,如下所示

volumes:
      - postgresdata:/home/postgres/pgdata/data/

参考:https://docs.timescale.com/self-hosted/latest/install/installation-docker/#install-self-hosted-timescaledb-from-a-pre-built-container

相关问题