如何在Docker中使用卷从转储或SQL文件恢复数据库?

16

我正在尝试在Docker中运行已经有一些数据的数据库,但是当我在Docker中运行它时,它变成了空的。那么如何在Docker PostgreSQL镜像中恢复我的数据库。


你能否更清楚地说明如何启动你的Docker容器?默认情况下,PostgreSQL容器将在容器本身中存储其数据。如果你删除它并重新启动容器,则所有数据都将丢失。 尝试查看将卷挂载到Docker容器中:https://docs.docker.com/storage/volumes/ - koenge
我有数据库的转储文件和SQL文件,如何在Docker数据库中还原。顺便说一下,我正在Windows机器上运行Docker。 - Yesha Dave
也许还可以展示您用于启动容器的 docker run 命令。 - ieggel
2个回答

39
首先,启动您的Docker Postgres容器。然后执行以下命令:
``` docker exec -i psql -U -d < ```
其中: - ``:容器ID或容器名称 - ``:PostgreSQL DBMS的用户。如果您使用标准的postgres镜像而没有特定的配置,则用户为`postgres` - ``:数据库的名称。此数据库应该已经存在。您可以通过指定名为 `POSTGRES_DB` 的环境变量来在运行postgres容器时创建数据库 - ``: 在此处指定转储文件的路径
例如: ``` docker exec -i mypostgres psql -U postgres -d mydb < backup.sql ```
希望这能帮到您。

3
我遇到了这个错误:OCI 运行时执行失败:exec 失败:container_linux.go:346:启动容器进程导致 "exec: "-U": 在 $PATH 中找不到可执行文件":未知。 - Yesha Dave
请在您的原始帖子中提供更多细节。从一开始就告诉我们所有的步骤。信息如此之少,很难提供帮助。 - ieggel
1
嘿...非常感谢。你的命令对我有用。那是我打错了字母。我真笨。非常感谢。 - Yesha Dave
2
@ieggel 第一行缺少 psql 命令在 <CONTAINER>-U 之间,这就是为什么它对 Yesha Dave 失败的原因。 - hob
大家都说 docker exec -i <CONTAINER> psql -U <USER> -d <DB-NAME> < <PATH-TO-DUMP>,但如果这是从 pg_dumpall 导出的备份文件,那么它包含多个数据库。在这种情况下,可以省略 -d 吗? - undefined

-2

当我将Pdi Jobs放入Docker容器中时,我遇到了这个错误:

ERROR(版本8.3.0.0-371,生成于2019-06-11 11:09:08,由buildguy构建):发生错误,处理将停止: 2019/10/31 05:02:03 - Table input.0 - 尝试连接到数据库时发生错误 2019/10/31 05:02:03 - Table input.0 - 2019/10/31 05:02:03 - Table input.0 - 连接数据库时出错:(使用类org.postgresql.Driver) 2019/10/31 05:02:03 - Table input.0 - 拒绝连接到localhost:5432。请检查主机名和端口是否正确,以及postmaster是否接受TCP/IP连接。 2019/10/31 05:02:03 - Table output.0 - ERROR(版本8.3.0.0-371,生成于2019-06-11 11:09:08,由buildguy构建):初始化此步骤时发生错误:

我的docker-compose文件:

version: '3.1'

services:
  pdijobs:
    image: pdijobs
   restart: always
    build: 
        context: .
        dockerfile: Dockerfile
    
    volumes:
    - ./data/jasper-data:/usr/local/tomcat/webapps
    ports:
      - "8080:8080"
    depends_on:
      - datawarehouse-db
    environment:
      DB_TYPE: postgresql
      DB_HOST: datawarehouse-db
      DB_NAME: data-warehouse
      DB_USER: postgres
      DB_PASSWORD: admin
datawarehouse-db:
    image: postgres:10
  restart: "no"
    environment:
      POSTGRES_DB: data-warehouse
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: admin
  
volumes:
  postgres-data:
  pgdata:

这似乎是一个独立的问题,而不是对原始问题的答案。 - David Maze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接