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

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

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

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

Войти через центр авторизации
Похожие вопросы
16 мая 2024, в 23:36
200000 руб./за проект
16 мая 2024, в 23:10
12000 руб./за проект