Задать вопрос
@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 бот не может подключиться к бд, что надо сделать?
  • Вопрос задан
  • 1013 просмотров
Подписаться 1 Простой 6 комментариев
Пригласить эксперта
Ответы на вопрос 2
@Everything_is_bad
ну почему тут localhost, когда же вы базу работы сетей начнете понимать
Ответ написан
karabanov
@karabanov Куратор тега Docker
Системный администратор
У каждого контейнера свой уникальный loopback интерфейс никак не связанный с loopback интерфейсом хостовой машины, поэтому в качестве имени хоста надо указывать имя сервиса, в данном случае postgres:

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

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

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

Похожие вопросы
Greenway Global Новосибирск
от 150 000 ₽
SPA2099 Москва
До 100 000 ₽
HR Prime Москва
от 300 000 до 3 800 000 ₽