pg_restore:[archiver]无法打开输入文件。没有这样的档案或导演

时间:2017-07-18 10:34:00

标签: docker-compose docker-volume

我想在Windows中为Dockgre for PostgreSQL导入数据库。

成功构建和发布容器后,我使用docker-compose up –d运行docker容器,然后尝试将数据库导入到项目中。

user@DESKTOP-A2MVLM4 MINGW64 ~/dockerProjectImage (master)
$ docker-compose exec db pg_restore -U fewo -h localhost --dbname=dbName backups/backup.psql

这里我有以下目录结构:

enter image description here

现在尝试从名为backup.psql的文件夹中导入数据库backups,该文件夹包含backup.psql个文件。

但是我收到了一个错误:

user@DESKTOP-A2MVLM4 MINGW64 ~/dockerProjectImage (master)
    $ docker-compose exec db pg_restore -U fewo -h localhost --dbname=dbName backups/backup.psql
    pg_restore: [archiver] could not open input file "backups/backup.psql": No such file or directory

目录和文件都可用。

搬运工-compose.yml:

version: '2'
services:

  web:
    image: image-url-web:latest
    links:
      - db
      - memcached
      - solr
    ports:
      - 8080:80
      - 8443:443
    volumes:
      - ./:/var/www

  solr:
    image: image-url-solr:latest
    links:
      - db
    ports:
      - "8700:8700"
      - "8710:8710"
      - "8720:8720"
      - "8730:8730"
    restart: always

  db:
    image: image-url-db:latest
    ports:
      - "8032:5432"
    restart: always
    environment:
      POSTGRES_DB: dbName
      POSTGRES_USER: dbUser
      POSTGRES_PASSWORD: 'password'
      POSTGRES_INITDB_ARGS: '-E SQL_ASCII'
    volumes:
      - ./:/var/www/backups

  memcached:
    image: memcached:1.4.31
    restart: always

1 个答案:

答案 0 :(得分:0)

根据您的屏幕截图,您的Windows系统上有一个backups目录。它似乎与您运行docker exec命令时所在的目录处于同一级别(基于示例中的shell提示符)。

然而,重要的是容器内的 。使用docker exec运行的命令在容器内运行,而不是直接在Windows系统上运行。这里讨论的容器是db服务,它在docker-compose.yml中定义了卷装:

db:
   volumes:
    - ./:/var/www/backups

这将在容器内docker-compose.yml处安装基本目录(/var/www/backups所在的目录)。

从屏幕截图中,我无法确定docker-compose.yml的位置,但您的命令文本示例表明它可能存在于~/dockerProjectImage中。这就是安装在/var/www/backups

的目录

从那时起,您无法访问屏幕截图中显示的backups目录。它位于dockerProjectImage之外,因此它不会成为装载的一部分。

解决此问题的一种方法是将backups目录移到dockerProjectImage内。然后它将在容器内以/var/www/backups/backups/的形式出现。但是,由于您使用的是相对路径(backups/backup.psql),因此仍然无法按照您编写命令的方式(可能)。您需要指定完整路径,例如

docker-compose exec db pg_restore -U fewo -h localhost \
    --dbname=dbName /var/www/backups/backups/backup.psql