编辑: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
答案 0 :(得分:1)
检查您的 Postgres 服务是否通过了环境变量:
version: "3"
services:
django:
build: .
restart: on-failure
container_name: django
command: bash -rc "python intento/manage.py makemigrations &&
python intento/manage.py migrate &&
gunicorn --limit-request-line 8190 --workers=3
--chdir /usr/src/app/src wsgi:application --bind 0.0.0.0:8000"
volumes:
- .:/usr/src/app
expose:
- 8000
env_file:
- ./.env
depends_on:
- pgdb
pgdb:
image: postgres
restart: on-failure
container_name: pgdb
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: ${DB_NAME}
编辑:刚刚看到你给出的例子,在你的 Postgres 环境属性中更改 = :
答案 1 :(得分:1)
如您所说,.env
文件是为 docker 构建设置环境变量的好习惯。
根据您的问题/问题:
我不确定我是否仍然需要在我的系统上本地创建数据库,或者 Docker 是否会自动处理它。
如果您还使用 docker-compose 部署 postgres 容器,则不必在本地创建数据库。如果是这种情况,我建议您将这两个容器连接到您选择的网络并命名容器,以便 django 容器可以使用主机名作为 postgres
。
可以有选择地将 .env
文件提供给容器(可能是您在粘贴 docker-compose 文件时缩进移动了),以下 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
networks:
- network_name
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
networks:
- network_name
networks:
network_name:
name: network_name
您可能会遇到用户的权限问题,因此您可能需要调查 this 问题,以指导您为数据库创建 Dockerfile
。
答案 2 :(得分:0)
当您第一次运行 docker-compose up
时,Postgres will initialize the DB 和配置的 POSTGRES_*
变量。
之后,如果您更改了这些变量之一,您也需要通过 psql
手动将它们重置到 DB 或执行 docker-compose rm postgres; docker-compose up postgres
以使用新变量重新创建 DB。
警告:docker-compose rm postgres
将删除您当前的数据库。
This answer 建议 docker-compose down -v
也擦除您的音量。