Михаил, подскажите пожалуйста. Я еще в других источниках видел, что пишут :80 . То есть оставляют пустой порт. Ваше мнение, так хорошо будет , если прописать :5432?
Munchen777, 80 это стандартный порт http сервера, например, nginx, apache и тд
5432 это стандартный порт postgres.
Какой порт открывать, зависит от того какой сервис он поднимает по умолчанию и какой порт слушает.
Михаил Васильев, понял. Можно вам еще вопрос задать?
Запускаю docker-compose . Два контейнера(телеграм бот и база данных postgres). Для начала хочу сначала локально все запустить. Ломается, когда должны создаться таблицы в боте, но до создания таблиц видно сообщение "Starting bot". Имя юзера, базы и пароль поставил свои, тк база уже существует(есть чуть-чуть записей). Пробовал и пользователя postgres и базу postgres вписывать - никак. Вероятно, нужно как-то связать бота внутри контейнера с сервисом базы данных тоже внутри контейнера. Порты пробовал ставить и "5433:5432". Видимо, дело не в мэппинге портов. И также пробовал обычные порты "5432:5432". Если с таким сталкивались, то подскажите, с чем может быть связано.
```
version: '3.5'
Munchen777, жаль не логов.
Конкретно тут, в общем и целом, docker-compose описан правильно, включая общую сеть и тд, но в разделе environment есть все и БД и пароль, но не указан сам хост. Предполагаю, что бот просто не понимает где находится БД и падает, не хватает, что-то типа:
environment:
- DB_HOST=database
или
- POSTGRES_HOST=database
Тут надо смотреть какие ENV использует сам бот для обращения БД, как написана его логика.
Михаил Васильев, вот логи. Пробовал и прописать как вы писали. Не помогло. Наверно, дело в том, что я использую не переменную окружения , а файл config.ini(конфигурационный) и файл config.py, где у меня configParser. Все же в основном используют переменные окружения --\/-_-\/--
Но как у меня прописано, билдится все, что находится. Файлы config.ini, main.py , docker-compose и Dockerfile у меня в корне на одном уровне.
```
docker-compose up
[+] Running 2/2
✔ Container try_create_async_bot-database-1 Recreated 0.1s
✔ Container try_create_async_bot-bot-1 Recreated 0.0s
Attaching to bot-1, database-1
database-1 |
database-1 | PostgreSQL Database directory appears to contain a database; Skipping initialization
database-1 |
database-1 | 2024-01-05 14:10:14.692 UTC [1] LOG: starting PostgreSQL 16.1 (Debian 16.1-1.pgdg120+1) on aarch64-unknown-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
database-1 | 2024-01-05 14:10:14.692 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
database-1 | 2024-01-05 14:10:14.692 UTC [1] LOG: listening on IPv6 address "::", port 5432
database-1 | 2024-01-05 14:10:14.693 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
database-1 | 2024-01-05 14:10:14.696 UTC [30] LOG: database system was shut down at 2024-01-05 14:08:24 UTC
database-1 | 2024-01-05 14:10:14.699 UTC [1] LOG: database system is ready to accept connections
bot-1 | 2024-01-05 14:10:15.967 | ERROR | __main__:main:27 - Starting bot
bot-1 | 2024-01-05 14:10:15.967 | INFO | __main__:create_tables:19 - Tables have been created.
bot-1 | Traceback (most recent call last):
bot-1 | File "/app/main.py", line 45, in
bot-1 | asyncio.run(main())
bot-1 | File "/usr/local/lib/python3.10/asyncio/runners.py", line 44, in run
bot-1 | return loop.run_until_complete(main)
bot-1 | File "/usr/local/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
bot-1 | return future.result()
bot-1 | File "/app/main.py", line 28, in main
bot-1 | await create_tables()
bot-1 | File "/app/main.py", line 20, in create_tables
bot-1 | async with async_engine.begin() as conn:
bot-1 | File "/usr/local/lib/python3.10/contextlib.py", line 199, in __aenter__
bot-1 | return await anext(self.gen)
bot-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/ext/asyncio/engine.py", line 1061, in begin
bot-1 | async with conn:
bot-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/ext/asyncio/base.py", line 125, in __aenter__
bot-1 | return await self.start(is_ctxmanager=True)
bot-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/ext/asyncio/engine.py", line 270, in start
bot-1 | await greenlet_spawn(self.sync_engine.connect)
bot-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 190, in greenlet_spawn
bot-1 | result = context.throw(*sys.exc_info())
bot-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3268, in connect
bot-1 | return self._connection_cls(self)
bot-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 145, in __init__
bot-1 | self._dbapi_connection = engine.raw_connection()
bot-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3292, in raw_connection
bot-1 | return self.pool.connect()
bot-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 452, in connect
bot-1 | return _ConnectionFairy._checkout(self)
bot-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 1269, in _checkout
bot-1 | fairy = _ConnectionRecord.checkout(pool)
bot-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 716, in checkout
bot-1 | rec = pool._do_get()
bot-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/impl.py", line 169, in _do_get
bot-1 | with util.safe_reraise():
bot-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 146, in __exit__
bot-1 | raise exc_value.with_traceback(exc_tb)
bot-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/impl.py", line 167, in _do_get
bot-1 | return self._create_connection()
bot-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 393, in _create_connection
bot-1 | return _ConnectionRecord(self)
bot-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 678, in __init__
bot-1 | self.__connect()
bot-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 902, in __connect
bot-1 | with util.safe_reraise():
bot-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 146, in __exit__
bot-1 | raise exc_value.with_traceback(exc_tb)
bot-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 898, in __connect
bot-1 | self.dbapi_connection = connection = pool._invoke_creator(self)
bot-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/create.py", line 637, in connect
bot-1 | return dialect.connect(*cargs, **cparams)
bot-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 616, in connect
bot-1 | return self.loaded_dbapi.connect(*cargs, **cparams)
bot-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 936, in connect
bot-1 | await_only(creator_fn(*arg, **kw)),
bot-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 125, in await_only
bot-1 | return current.driver.switch(awaitable) # type: ignore[no-any-return]
bot-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 185, in greenlet_spawn
bot-1 | value = await result
bot-1 | File "/usr/local/lib/python3.10/site-packages/asyncpg/connection.py", line 2329, in connect
bot-1 | return await connect_utils._connect(
bot-1 | File "/usr/local/lib/python3.10/site-packages/asyncpg/connect_utils.py", line 1017, in _connect
bot-1 | raise last_error or exceptions.TargetServerAttributeNotMatched(
bot-1 | File "/usr/local/lib/python3.10/site-packages/asyncpg/connect_utils.py", line 991, in _connect
bot-1 | conn = await _connect_addr(
bot-1 | File "/usr/local/lib/python3.10/site-packages/asyncpg/connect_utils.py", line 828, in _connect_addr
bot-1 | return await __connect_addr(params, True, *args)
bot-1 | File "/usr/local/lib/python3.10/site-packages/asyncpg/connect_utils.py", line 873, in __connect_addr
bot-1 | tr, pr = await connector
bot-1 | File "/usr/local/lib/python3.10/site-packages/asyncpg/connect_utils.py", line 744, in _create_ssl_connection
bot-1 | tr, pr = await loop.create_connection(
bot-1 | File "/usr/local/lib/python3.10/asyncio/base_events.py", line 1084, in create_connection
bot-1 | raise OSError('Multiple exceptions: {}'.format(
bot-1 | OSError: Multiple exceptions: [Errno 111] Connect call failed ('127.0.0.1', 5432), [Errno 99] Cannot assign requested address
bot-1 exited with code 1
```
Бот лезет по адресу 127.0.0.1 5432 и не может туда попасть.
Попробуйте прописать руками в этом конфиге (там где хранятся настройки подключения у бота) в строку подключения database вместо localhost и пересобрать контейнер. Но скажу сразу, это ни разу не best practices, по хорошему такие вещи передаются через переменные окружения.
Михаил Васильев, аллилуйя. Запустилось) Походу моя ошибка была , что я только использовал команду docker-compose up, но до этого не сделал билд образа, то есть выполнил команду docker-compose up --build
Ваш совет кстати помог. В environments прописал у бота базу