2017-07-18 56 views
0

我想在Docker for PostgreSQL中导入数据库。pg_restore:[archiver]无法打开输入文件。没有这样的文件或导演

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

[email protected] MINGW64 ~/dockerProjectImage (master) 
$ docker-compose exec db pg_restore -U fewo -h localhost --dbname=dbName backups/backup.psql 

在这里,我有以下目录结构:

enter image description here

现在尝试从命名backups文件夹,里面有backup.psql文件导入数据库backup.psql

但我得到一个错误:

[email protected] 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 

回答

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 
+0

我遵循了上面提到的相同步骤。在这里**/**在'/ var/www/backups/backups/backup.psql'中假定为** C:/ Program Files **,并给出以下错误: '$ docker-compose exec db pg_restore -U fewo -h localhost --dbname = dbName/var/www/backups/backups/dbName。psql pg_restore:[archiver]无法打开输入文件“C:/ Program Files/Git/var/www/backups/backups/dbName.psql”:没有这样的文件或目录# –

+0

@DeepakPathak你的截图和问题不会'不要提及有关'C:\ Program Files \'的任何内容,所以我不能告诉你在那里发生了什么。我只是在做一个随机猜测,因为在这个问题中没有关于该目录的任何信息。您可能需要在您的问题中添加更多详细信息,以便人们提出可能的解决方案。 –

相关问题