簡體   English   中英

將現有數據庫卷到容器的最佳方法是什么?

[英]What is the best way to volume existing database to the container?

需要通過 docker 容器運行項目。 我需要將現有數據庫掛載到 postgres 容器。 在我的 docker-compose.yml 中有下一個


services:

  web:
    build: .
    env_file: .env
    command: bash -c "python manage.py collectstatic --no-input && python manage.py makemigrations && python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
    ports:
      - "8000:8000"
    depends_on:
      - redis
      - postgres
    restart: always
    volumes:
      - static:/static
    expose:
      - 8000
    environment:
      - .env
    links:
      - postgres
      - redis

  redis:
    image: "redis:alpine"


  postgres:
    image: "postgres:10"
    env_file:
      - .env
    volumes:
      - POSTGRES_DATA:/var/lib/postgresql/data
    ports:
      - "5433:5432"
    expose:
      - 5433

volumes:
    POSTGRES_DATA:
    static:

來自 my.env 文件

POSTGRES_NAME=dbname
POSTGRES_USER=dbuser
POSTGRES_PASSWORD=dbpassword
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DATA=/var/lib/postgresql/10/main

但是在我的 web 容器中,我有下一個日志

  File "/usr/local/lib/python3.7/site-packages/psycopg2/__init__.py", line 130, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: FATAL:  database "dbname" does not exist

這意味着數據庫掛載失敗。 但我真的找不到它發生的原因。

我不確定,但你可以試試這個命令: docker-compose down -v刪除卷和容器

來自文檔

警告:/docker-entrypoint-initdb.d 中的腳本僅在您使用空數據目錄啟動容器時運行; 任何預先存在的數據庫都將在容器啟動時保持不變。 一個常見問題是,如果您的 /docker-entrypoint-initdb.d 腳本之一失敗(這將導致入口點腳本退出)並且您的協調器使用已初始化的數據目錄重新啟動容器,它將不會繼續使用您的腳本

所以你需要提供數據:

volumes:
  - /path/where/my/data/are:/var/lib/postgresql/data

我可以在您的撰寫中看到您使用卷POSTGRES_DATA ,我認為這是一個名為 Volume 的新空

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM