2017-07-18 251 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 \'的任何內容,所以我不能告訴你在那裏發生了什麼。我只是在做一個隨機猜測,因爲在這個問題中沒有關於該目錄的任何信息。您可能需要在您的問題中添加更多詳細信息,以便人們提出可能的解決方案。 –

相關問題