@gidwin

Как запустить через docker-compose телеграмм бота на aiogram+PostgreSQL?

Суть проста, у меня поднимается докер контейнер с postgreSQL, но мой бот не может к нему подключиться. Что делать и как быть?
Вот docker-compose:
version: "3.9"
services:
  postgres:
    container_name: postgres_container
    image: postgres:14.3-alpine
    environment:
      - POSTGRES_DB=telegram
      - POSTGRES_USER=11111111111
      - POSTGRES_PASSWORD=1111111111
    volumes:
      - pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    restart: unless-stopped
    networks:
      - postgres

  pgadmin:
    container_name: pgadmin_container
    image: dpage/pgadmin4
    environment:
      - PGADMIN_DEFAULT_EMAIL=mail@mail.ru
      - PGADMIN_DEFAULT_PASSWORD=11111111111111
    volumes:
      - pgadmin-data:/var/lib/pgadmin
    ports:
      - "5050:80"
    restart: unless-stopped
    networks:
      - postgres

  mybot:
    build: .
    depends_on:
      - postgres
      - pgadmin
    command: sh -c 'sleep 35'
    restart: on-failure

volumes:
  pgdata:
  pgadmin-data:

networks:
  postgres:
    driver: bridge

Вот мой url для подключения бота к бд
url = 'postgresql+asyncpg://11111111:11111111111@localhost:5432/telegram'
Докерфайл, если нужен -
FROM python:3.9
WORKDIR /bot
COPY requirements.txt .
RUN pip install -r requirements.txt --no-cache-dir
COPY . .
CMD ["python", "bot.py"]
Локально запуская файл bot.py при созданной бд через pgadmin4 все работает, но вот при сборке и запуске через docker-compose бот не может подключиться к бд, что надо сделать?
  • Вопрос задан
  • 833 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Everything_is_bad
ну почему тут localhost, когда же вы базу работы сетей начнете понимать
Ответ написан
karabanov
@karabanov Куратор тега Docker
Системный администратор
У каждого контейнера свой уникальный loopback интерфейс никак не связанный с loopback интерфейсом хостовой машины, поэтому в качестве имени хоста надо указывать имя сервиса, в данном случае postgres:

url = 'postgresql+asyncpg://postgres:root1@postgres:5432/telegram'

PS
Можно снять изоляцию с сети (network_mode: host), тогда будет использоваться loopback интерфейс хостовой машины, но делать так не надо.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы