Docker compose pg_restore:[archiver]无法打开输入文件。没有此类文件或董事

Docker compose pg_restore:[archiver]无法打开输入文件。没有此类文件或董事,docker-compose,docker-volume,Docker Compose,Docker Volume,我想在Windows中导入Docker 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

我想在Windows中导入Docker 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
这里我有以下目录结构:

现在尝试从名为
backups
的文件夹导入数据库
backup.psql
,该文件夹具有
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
而目录和文件都可用

docker compose.yml:

版本:“2”
服务:
网状物:
图片:图片url网站:最新
链接:
-分贝
-memcached
-索尔
端口:
- 8080:80
- 8443:443
卷数:
-./:/var/www
解决方案:
image:image-url-solr:latest
链接:
-分贝
端口:
- "8700:8700"
- "8710:8710"
- "8720:8720"
- "8730:8730"
重新启动:始终
db:
图像:图像url数据库:最新
端口:
- "8032:5432"
重新启动:始终
环境:
POSTGRES_DB:dbName
POSTGRES_用户:dbUser
POSTGRES_密码:“密码”
POSTGRES_INITDB_参数:'-E SQL_ASCII'
卷数:
-./:/var/www/backups
memcached:
图片:memcached:1.4.31
重新启动:始终

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

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

db:
卷数:
-./:/var/www/backups
这将在容器内的
/var/www/backups
处装载基本目录(docker compose.yml所在的目录)

从您的屏幕截图中,我无法告诉您,
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

我遵循了与您上面提到的相同的步骤。此处/in
/var/www/backups/backups/backup.psql
假定为C:/Program文件,并给出以下错误:
$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/backups/dbname.psql”:没有这样的文件或目录
@DeepakPathak您的屏幕截图和问题不要提及任何关于“C:\Program Files”的内容,所以我无法告诉您那里发生了什么。我只是随便猜测一下,因为问题中没有关于该目录的任何信息。您可能需要在问题中添加更多细节,以便让人们提出可能的解决方案。