Как подключиться к базе данных 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

Вернуться на верх