Как подключиться к базе данных postgres в док-контейнере?

Я установил свой контейнер 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

Я очень новичок в Докере.

Вы устанавливаете имя пользователя и пароль my_user/my_password в конфигурации; эти учетные данные работают?

David Maze 11.11.2022 12:26

я полагаю, это работает, потому что база данных postgres успешно создана с этими конфигурациями, но я хочу подключиться к этой базе данных и не могу подключиться? @DavidMaze

Mark 11.11.2022 12:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
255
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Вы не используете имя пользователя и пароль, указанные в файле 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

Mark 11.11.2022 14:11

Предполагая, что ваш контейнер запущен и работает, попробуйте docker exec -it container_id psql -U my_user -d my_db --password, а затем введите my_password. Должно работать нормально! И обратите внимание, что удобнее заменить container_id на $(docker ps | awk '/postgres/ {print $1}').

scūriolus 11.11.2022 15:33

Я также хотел бы добавить, что в вашем файле компоновки вы не предоставляете никаких портов для контейнера 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

Другие вопросы по теме