#postgresql #docker
#postgresql #docker
Вопрос:
Я «настроил» приложение Django / PostgreSQL и пытаюсь подключиться к своей базе данных. У меня есть 2 контейнера: web и db. Это работает, но я не могу подключиться к своей базе данных postgresql
Раньше я запускал docker exec -it coverage_africa_db_1 psql -U postgres
, но получил сообщение об ошибке
psql: ошибка: не удалось подключиться к серверу: ФАТАЛЬНО: роль «postgres» не существует
Я пытаюсь «перейти» в свой контейнер, выполнив команду docker exec -it aab213f730cd bash
, и пытаюсь подключиться с помощью команды psql…
psql -d db_dev
psql: ошибка: не удалось подключиться к серверу: ФАТАЛЬНО: роль «root» не существует
или
psql -U postgres
ошибка: не удалось подключиться к серверу: ФАТАЛЬНО: роль «postgres» не существует
на самом деле, ни одна из опций psql не работает…
.env.dev
SECRET_KEY=*************************************
DEBUG=1
DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1]
SQL_ENGINE=django.db.backends.postgresql
SQL_DATABASE=db_dev
SQL_USER=user
SQL_PASSWORD=user
SQL_HOST=db
SQL_PORT=5432
DATABASE=postgres
DJANGO_SETTINGS_MODULE=core.settings.dev
docker-compose.yml
version: '3.7'
services:
web:
build: ./app
restart: always
command: python manage.py runserver 0.0.0.0:8000
volumes:
- ./app/:/usr/src/app
ports:
- 8000:8000
env_file:
- ./.env.dev
depends_on:
- db
db:
image: postgres:12.0-alpine
restart: always
volumes:
- postgres_data:/var/lib/postgres/data/
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=user
- POSTGRES_DB=db_dev
volumes:
postgres_data:
Ответ №1:
С контейнером postgres это:
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=user
- POSTGRES_DB=db_dev
определяет способ инициализации базы данных. Если вы ее не меняли, вы должны иметь возможность подключиться как пользователь «user» с паролем «user».
Если вы ее изменили, то фактические значения — это те, которые присутствовали при первом запуске. После первого запуска эти учетные данные записываются в базу данных, данные которой находятся на postgres_data
томе. Если вы хотите удалить данные и повторно инициализировать базу данных с новыми учетными данными, используйте docker-compose down -v
.
Комментарии:
1. спасибо за ответ. Я не менял ее и не пытался
docker exec -it coverage_africa_db_1 psql -U user
и получил сообщение об ошибкеpsql: error: could not connect to server: FATAL: database "user" does not exist
2. не понимаю, почему в одном случае это роль не существует, а в другом случае база данных не существует
3. Я уже делаю docker-compose down (без -v), но ничего не изменил…
4. Вы назвали свою базу данных ‘db_dev’ с
POSTGRES_DB=db_dev
помощью . Попробуйтеdocker exec -it coverage_africa_db_1 psql -d db_dev -U user
.5. Пожалуйста. Проверьте эту страницу, если хотите узнать больше об этих переменных hub.docker.com/_/postgres .