【问题标题】:How to import and manage the database in postgresql on the docker?如何在docker上的postgresql中导入和管理数据库?
【发布时间】:2021-08-01 07:32:36
【问题描述】:

我的 Django 项目结构如下:

myapp/
    manage.py
    Dockerfile
    docker-compose.yml
    my-database1.sql
    my-database2.sql
    requirements.txt
    pgadmin/
    pgadmin-data/
    myapp/
        __init__.py
        settings.py
        urls.py
        wsgi.py

这是我的docker-compose.yml 文件:

version: "3.9"
   
services:
  db:
    image: postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data
      - ./my-database1.sql:/docker-entrypoint-initdb.d/my-database1.sql
      - ./my-database2.sql:/docker-entrypoint-initdb.d/my-database2.sql
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - PGDATA=/var/lib/postgresql/data
  
  pgadmin:
    image: dpage/pgadmin4:4.18
    restart: unless-stopped
    environment:
      - PGADMIN_DEFAULT_EMAIL=admin@domain.com
      - PGADMIN_DEFAULT_PASSWORD=admin
      - PGADMIN_LISTEN_PORT=80
    ports:
      - "8090:80"
    volumes:
      - ./pgadmin-data:/var/lib/pgadmin
    links:
      - "db:pgsql-server"


  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

volumes:
  db-data:
  pgadmin-data:

我的应用存在三个问题:

1 - 如何将我的 my-database1.sqlmy-database2.sql 数据库导入 postgresql?我的代码中的解决方案(我的意思是./my-database1.sql:/docker-entrypoint-initdb.d/my-database1.sql)不起作用。 2 - 从上一步成功导入数据库后,我如何在 pgadmin 中看到它们? 3 - 我的代码应该在 my-database1.sql 的表中写入一些内容。导入postgresql后应该如何连接?

【问题讨论】:

    标签: python django postgresql docker-compose pgadmin


    【解决方案1】:

    postgres 映像只会在空文件夹上运行时尝试运行/docker-entrypoint-initdb.d 目录中提供的文件。通过您的docker-compose.yml 配置,您拥有数据库数据的持久卷。这意味着 Postgres 在以后的部署中不会考虑对 SQL 文件的更新。当其中一个脚本失败时会发生类似的事情。这是documentation的摘录:

    警告:/docker-entrypoint-initdb.d 中的脚本仅在您使用空数据目录启动容器时运行;任何预先存在的数据库都将在容器启动时保持不变。一个常见问题是,如果您的 /docker-entrypoint-initdb.d 脚本之一失败(这将导致入口点脚本退出)并且您的协调器使用已初始化的数据目录重新启动容器,它将无法继续执行您的脚本。

    查看站点文档,了解如何使初始化脚本更加健壮,以便它们能够处理故障。

    要解决您的问题,请尝试手动删除卷或在运行docker-compose down 时使用-v 标志,然后重新部署您的应用程序:

    -v, --volumes         Remove named volumes declared in the `volumes`
                          section of the Compose file and anonymous volumes
                          attached to containers.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 2021-02-21
      • 2013-02-17
      • 1970-01-01
      • 2019-02-17
      • 1970-01-01
      • 2017-12-20
      相关资源
      最近更新 更多