我想在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
这里我有以下目录结构:
现在尝试从名为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
答案 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