Как подключиться к базе данных postgres в контейнере docker?
Я установил свой контейнер django и postgres на локальной машине, и все работает нормально. Локальный сервер работает, база данных работает, но я не могу подключиться к созданной базе данных postgres.
docker-compose.yml
version: '3'
services:
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/app
ports:
- "8000:8000"
depends_on:
- db
db:
image: postgres:13.0-alpine
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=my_user
- POSTGRES_PASSWORD=my_password
- POSTGRES_DB=my_db
volumes:
postgres_data:
Я попробовал эту команду:
docker exec -it container_id psql -U postgres
ошибка:
psql: error: could not connect to server: FATAL: role "postgres" does not exist
Я очень новичок в Docker.
Вы не используете имя пользователя и пароль, указанные в файле docker-compose. Попробуйте следующее:
docker exec -it container_id "export PGPASSWORD=my_password; psql -U my_user -d my_db"
Просмотрите официальную документацию , чтобы узнать о терминале PostgreSQL.
Я также хотел бы добавить, что в вашем файле compose вы не открываете никаких портов для контейнера db. Поэтому он будет недоступен через внешние источники (вы, ваше приложение или что-либо, не запущенное в этом контейнере).
Я думаю, что вам нужно добавить environment
в контейнер проекта.
environment:
- DB_HOST=db
- DB_NAME=my_db
- DB_USER=youruser
- DB_PASS=yourpass
depends_on:
- db
добавьте это перед depends_on
А теперь посмотрим, решает ли это
Вы должны добавить порты в docker-compose для образа postgres, так как это позволит postgres быть доступным вне контейнера
- ports:
"5432:5432"
Подробнее можно посмотреть здесь docker-compose for postgres