Я установил свой контейнер django и postgres на свой локальный компьютер, и все работает нормально. Локальный сервер работает, база данных работает, но я не могу подключиться к созданной базе данных postgres.
докер-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
Я очень новичок в Докере.
я полагаю, это работает, потому что база данных postgres успешно создана с этими конфигурациями, но я хочу подключиться к этой базе данных и не могу подключиться? @DavidMaze





Вы не используете имя пользователя и пароль, указанные в файле docker-compose. Попробуйте это, а затем введите my_password:
docker exec -it container_id psql -U my_user -d my_db --password
Проверьте официальную документацию, чтобы узнать о терминале PostgreSQL.
получил эту ошибку: OCI runtime exec failed: exec failed: unable to start container process: exec: "export PGPASSWORD=my_password; psql -U my_user -d my_db": executable file not found in $PATH: unknown
Предполагая, что ваш контейнер запущен и работает, попробуйте docker exec -it container_id psql -U my_user -d my_db --password, а затем введите my_password. Должно работать нормально! И обратите внимание, что удобнее заменить container_id на $(docker ps | awk '/postgres/ {print $1}').
Я также хотел бы добавить, что в вашем файле компоновки вы не предоставляете никаких портов для контейнера 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 для postgres
Вы устанавливаете имя пользователя и пароль
my_user/my_passwordв конфигурации; эти учетные данные работают?