Postgresql версия в docker контейнере не совместима с его данными - PullRequest
0 голосов
/ 10 января 2020

Ма c ОС 10.13.6 docker 9.03.5, сборка 633a0ea

Я создаю два контейнера docker, web и db, используя docker -compose.yml. Это работало в течение нескольких месяцев. Недавно я решил перестроить контейнеры с нуля, поэтому я фактически удалил существующие и начал заново:

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

При запуске прогона "build" сборка контейнера db дает следующее:

DETAIL: Каталог данных был инициализирован PostgreSQL версией 9.6, которая не совместима с этой версией 11.2.

с кодом 1

Контейнер базы данных не запускается, поэтому Я не могу проверить, что у него внутри.

Мои контейнеры определены следующим образом:

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!

Я прочитал Переполнение стека 17822974 и Переполнение стека 19076980 , эти советы не помогли.

Как исправить эту несовместимость данных? Если возможно, я бы хотел избежать понижения postgres. Я даже не понимаю, о каких данных идет речь, все данные переносятся позже на отдельном этапе.

1 Ответ

0 голосов
/ 11 января 2020

Похоже, что при первом запуске Postgres 9.6 было указано в качестве изображения. Итак, контейнер был инициализирован, а данные помещены в именованный том myapp-db-dev. Затем кто-то изменил версию, и вы получили ошибку. Возможное решение:

  1. Временное понижение версии до Postgres 9.6, например, укажите postgres:9.6.
  2. Go для контейнера и сбросьте данные с помощью * Утилита 1008 *.
  3. Измените версию на 11.2 и укажите новый том (рекомендуется использовать том хоста).
  4. Восстановите данные.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...