You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows环境下如何在Docker中使用pg_restore导入备份文件?

Windows环境下Docker Compose PostgreSQL容器导入备份文件的解决方法

问题场景

通过docker-compose启动web和PostgreSQL(db服务)两个容器,需使用pg_restore导入自定义备份文件。docker-compose配置如下:

version: '3.8'

services:
  web:
    build: .
    command: python /code/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - 8000:8000
    stdin_open: true
    tty: true
    depends_on:
      - db
    environment:
      - "DJANGO_SECRET_KEY=django-insecure-rt@&+(5fp=+$$hj87no^w40l&d-q6wk5b3jdvos_=kt#@+85b8f"
      - "DJANGO_DEBUG=True"
      - "ALLOWED_HOSTS=172.105.16.56,.smartmark.ca,localhost,127.0.0.1"

  db:
    image: postgres:11
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      - "POSTGRES_HOST_AUTH_METHOD=trust"

volumes:
  postgres_data:

尝试执行以下命令时出错:

docker-compose exec smartmark-db-1 pg_restore -U postgres -d postgres export.dbase

报错信息:
service "smartmark-db-1" is not running container #1
通过docker ps确认容器实际名称为smarmark-db-1。

另外尝试重定向命令时,Windows命令行报错:

docker exec -i container_name pg_restore -Fc -U admin_username -d database_name < pg_dump_Fc_file

报错信息:
The '<' operator is reserved for future use.

错误原因

  1. docker-compose exec参数错误:该命令需跟docker-compose配置中的服务名(即db),而非容器名称。
  2. Windows CMD不支持重定向:默认命令提示符(CMD)不识别<输入重定向语法,PowerShell或类Unix终端(如Git Bash)支持该语法。

解决步骤

方法一:用docker-compose exec(推荐)

直接通过服务名操作,无需关注容器名称:

  1. 若备份文件在本地目录,先修改docker-compose.yaml,将备份目录挂载到db服务:
db:
  image: postgres:11
  volumes:
    - postgres_data:/var/lib/postgresql/data/
    - ./backups:/backups  # 新增挂载,本地backups目录对应容器内/backups
  environment:
    - "POSTGRES_HOST_AUTH_METHOD=trust"

执行docker-compose up -d重启db服务。

  1. 执行导入命令:
docker-compose exec db pg_restore -U postgres -d postgres /backups/export.dbase

方法二:用docker exec配合容器名

  1. 解决重定向问题:

    • 切换到PowerShell执行(替换容器名和备份文件名):
    docker exec -i smarmark-db-1 pg_restore -U postgres -d postgres < export.dbase
    
    • 或使用Git Bash等类Unix终端执行原命令。
  2. 先复制备份文件到容器再导入:

    • 将本地备份文件复制到容器临时目录:
    docker cp export.dbase smarmark-db-1:/tmp/export.dbase
    
    • 进入容器执行导入:
    docker exec -it smarmark-db-1 pg_restore -U postgres -d postgres /tmp/export.dbase
    

内容的提问来源于stack exchange,提问作者Doug Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:52:58