编辑:Docker似乎没有创建我的postgres数据库,即使我在我的.env
文件中定义了它们
我使用了docker-compose config
,看起来Docker确认了我的数据:
environment:
POSTGRES_DB: animemusicsorter
POSTGRES_PASSWORD: root
POSTGRES_USER: waifuszn
但是,当我运行docker-compose up
时,会出现以下错误:
postgres | 2021-07-12 22:39:01.906 UTC [35] FATAL: password authentication failed for user "waifuszn"
postgres | 2021-07-12 22:39:01.906 UTC [35] DETAIL: Role "waifuszn" does not exist.
我尝试过删除卷、删除postgres
并重新创建它们,但这也没有给我任何结果
docker-compose.yml
version: '3.5'
services:
postgres:
container_name: postgres
image: postgres:11.6
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: ${DB_NAME}
POSTGRES_USER: ${DB_USER}
volumes:
- ~/srv/docker/template-postgres/data:/var/lib/postgresql/data:rw
django:
container_name: django
build:
context: .
dockerfile: ./conf/django/Dockerfile.windows
command: python manage.py runserver 0.0.0.0:8000
ports:
- "8000:8000"
volumes:
- ./back:/app:rw
depends_on:
- postgres
env_file:
- .env
react:
container_name: react
build:
context: .
dockerfile: ./conf/react/Dockerfile
command: yarn run start:dev
ports:
- "4000:4000"
volumes:
- ./front/src:/app/src:rw
- ./front/public:/app/public:rw
如您所述
.env
文件是为docker构建设置环境变量的良好实践。根据你的问题:
如果同时使用docker compose部署postgres容器,则不必在本地创建数据库。如果是这种情况,我建议您将这两个容器连接到您选择的网络,并命名容器,以便django容器可以使用主机名
postgres
。 可以有选择地将.env
文件提供给容器(粘贴docker compose文件时可能会移动缩进),下面的docker-compose.yml
文件应该如下所示您可能会面临用户权限问题,因此您可能希望研究this问题,该问题可以指导您为数据库创建
Dockerfile
检查您的Postgres服务是否传递了环境变量:
编辑:刚刚看到您给出的示例,使用以下内容更改Postgres环境属性中的=:
第一次运行
docker-compose up
时,使用配置的POSTGRES_*
变量Postgres will initialize the DB之后,如果更改了其中一个变量,则需要通过
psql
或执行docker-compose rm postgres; docker-compose up postgres
手动将它们重置为DB,以使用新变量重新创建DB警告:
docker-compose rm postgres
将删除当前数据库This answer建议
docker-compose down -v
擦除您的卷相关问题 更多 >
编程相关推荐