【问题标题】:Postgresql version in docker container is not compatible with its datadocker 容器中的 Postgresql 版本与其数据不兼容
【发布时间】:2023-03-04 13:25:01
【问题描述】:

Mac OS 10.13.6 泊坞窗 9.03.5,构建 633a0ea

我使用 docker-compose.yml 创建了两个 docker 容器,web 和 db。它工作了几个月。最近我决定从头开始重建容器,所以我实际上删除了现有的容器并重新开始:

$ docker-compose  -f docker-compose-dev.yml build --no-cache
$ docker-compose  -f docker-compose-dev.yml up -d

在“构建”运行期间,构建 db 容器会产生以下结果:

DETAIL:数据目录由 PostgreSQL 9.6 版初始化, 与此版本 11.2 不兼容。

以代码 1 退出

db 容器没有启动,所以我无法检查里面有什么。

我的容器 是这样定义的:

version: '3'

services:
  web:
    restart: unless-stopped
    container_name: web
    build:
      context: .
      dockerfile: Dockerfile.dev
    ports:
      - "8000:8000"
    environment:
      DJANGO_SETTINGS_MODULE: '<my_app>.settings.postgres'
      DB_NAME: 'my_db'
      DB_USER: 'my_db_user'
      DB_PASS: 'my_db_user'
      DB_HOST: 'my_db_host'
      PRODUCTION: 'false'
      DEBUG: 'True'
    depends_on:
      - db
    volumes:
      - ./:/usr/src/app/
  db:
    image: postgres:11.2-alpine
    volumes:
      - myapp-db-dev:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=<my_db>
      - POSTGRES_USER=<my_db_user>
      - POSTGRES_PASSWORD=<my_db_password>
volumes:
  myapp-db-dev:

我本地的 postgresql 是 11.3(应该无关紧要):

$ psql --version
psql (PostgreSQL) 11.3

我的本​​地 postgresql 数据目录被完全删除

$ rm -rf /usr/local/var/postgres

但是,它是最新的:

$ brew postgresql-upgrade-database
Error: postgresql data already upgraded!

我读了Stack Overflow 17822974Stack Overflow 19076980,这些建议没有帮助。

如何解决此数据不兼容问题?如果可能的话,我想避免降级 postgres。那时我什至不知道它在谈论什么数据,所有数据都是稍后在单独的步骤中迁移的。

【问题讨论】:

    标签: postgresql docker version


    【解决方案1】:

    似乎在第一次运行时 Postgres 9.6 被指定为图像。因此,容器被初始化,数据被放入myapp-db-dev 命名卷。然后有人更改了版本,您遇到了错误。可能的解决方案是:

    1. 暂时将版本降级到 Postgres 9.6,例如指定postgres:9.6
    2. 转到容器并使用pg_dump 实用程序转储数据。
    3. 将版本更改为 11.2 并指定新卷(建议使用主机卷)。
    4. 恢复数据。

    【讨论】:

    • pg_data 是什么?也许pg_dump?您能否详细说明“指定新卷”?我的docker-compose.ymldb 容器中的货币我有- data:/var/lib/postgresql/data,我应该用其他东西替换它吗?用什么?
    • @SwissNavy 是的,应该是pg_dump。是的,例如 ./mydata: /var/lib/postgresql/data,但请检查您是否正确备份了数据。
    猜你喜欢
    • 2020-01-28
    • 1970-01-01
    • 2022-01-10
    • 2021-11-24
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多