【发布时间】:2022-01-04 16:15:39
【问题描述】:
我在尝试从 docker django app environment 备份和恢复我的数据库时遇到了这个错误: error
我首先执行此命令来备份我的整个数据库
docker exec -t project_final-db-1 pg_dumpall -c -U fred2020 > ./db/dump.sql
然后尝试使用此命令恢复
cat dump.sql | docker exec -i --user fred2020 catsitting-db-1 psql -U fred2020 -d postgres
我有两个容器,一个用于我的 django 应用程序,名为 catsitting-web-1,另一个用于我的 postgresql,名为 catsitting-db-1
我不明白为什么它给了我这个错误,我的 db 用户与我在 dockerfile 中指定的相同...
有什么线索吗? 出于目的的帮助,这是我的 docker 文件配置:
Dockerfile
FROM python:3.9
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
RUN pip install Pillow
COPY . /code/
docker-compose.yml
version: "3.9"
services:
db:
image: postgres
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=fred2020
- POSTGRES_PASSWORD=p*******DD
expose:
- "5432"
ports:
- 5432:5432
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
requirements.txt
Django>=3.0,<4.0
psycopg2-binary>=2.8
Pillow==8.1.0
这就是我从笔记本电脑1迁移到笔记本电脑2的过程:
安装
运行命令行进入根目录并运行:
git clone https://github.com/XXXXXXXXXXXXXXXX
在命令行进入根目录:
cd catsitting
在同一命令行窗口中,运行:
docker-compose build --no-cache
在命令行窗口中,您首先需要为 Django 迁移数据库,运行:
docker-compose run web python manage.py migrate
在命令行窗口中,您需要应用迁移,运行:
docker-compose run web python manage.py makemigrations
在命令行窗口中,你需要导入数据库,运行:
cat dump.sql | docker exec -i --user fred2020 catsitting-db-1 psql -U fred2020 -d postgres
(为了转储我的数据库,我使用了docker exec -t project_final-db-1 pg_dumpall -c -U fred2020 > ./db/dump.sql)
您现在可以运行:
docker-compose up
我有什么问题吗?
【问题讨论】:
-
为什么要使用不同的容器名称来备份和恢复数据库? project_final-db-1 != catsitting-db-1。此外,您不必添加
-d postgres进行恢复,因为它是默认表名 -
问题是我在第一台笔记本电脑上工作,我的存储库被称为“project_final”,我从这个 docker 环境中备份,我的容器被命名为“project_final-db-1”,用于 postgresql 数据库。现在我想在新笔记本电脑中恢复该数据库,因为我正在恢复 docker 环境和整个 django 应用程序(使用 db 数据...)。如果从笔记本电脑 1 到笔记本电脑 2 的容器名称不同,这会不会有问题?
-
该错误明确指出密码验证失败。要么你没有创建用户,要么你没有传递正确的密码,要么你没有为该用户设置适当的权限。
-
您好,在我的 docker-compose.yml 文件中,提到了“POSTGRES_USER=fred2020”和“POSTGRES_PASSWORD”属性的密码。当我通过 PGADMIN 连接时,我使用相同的用户名和密码。你认为这是我的备份命令行错误吗:
docker exec -t project_final-db-1 pg_dumpall -c -U fred2020 > ./db/dump.sql。备份数据库时,我需要如何或在哪里指定密码?这是我的 PGADMIN imgur.com/a/w9Fh78C 的打印屏幕 -
我在另一台笔记本电脑上再次尝试,但仍然收到此错误消息
catsitting-db-1 | 2021-11-27 13:14:40.917 UTC [33] FATAL: password authentication failed for user "fred2020" catsitting-db-1 | 2021-11-27 13:14:40.917 UTC [33] DETAIL: User "fred2020" does not have a valid SCRAM secret.我已在 pgadmin 中授予用户 fred2020 的所有组成员身份。我真的卡住了……
标签: python django postgresql docker