Как создать одну сеть для двух разных Docker контейнеров, с возможностью подключения при помощи Python

Я создал два разных докер контейнера и пытаюсь подключиться к базе данных, однако подключение никаким образом не получается. Я создаю телеграм бота, и у меня есть необходимость запускать постоянно два разных контейнера которые объеденены одной сетью для подключения к базе данных.

О моих Docker контейнерах:

  1. Python проект с версией 3.11.9 (image: python:3.11.9-alpine3.19), который должен подключаться к базе данных MongoDB, используя python библиотеку motor версии 3.4.0 (pip install motor==3.4.0) а также pymongo версии 4.6.3 (pip install pymongo==4.6.3)
  2. База данных MongoDB версии 4.4.29 (image: mongo:4.4.29)

Я уже проверил все возможные варианты для подключения к базе данных MongoDB из Python, а то есть:

  1. Самостоятельно создавал сеть при помощи docker network create mongodb (имя сети), указывал эту сеть в docker-compose файле mongodb а также docker-compose файле самого python проекта.

Файл docker-compose для python:

version: "3.3"

services:
  telegrambot:
    image: "telegrambot"
    container_name: "telegrambot"
    restart: "unless-stopped"
    stdin_open: "true"
    tty: "true"
    build:
      context: "."
      dockerfile: "Dockerfile"
    networks:
      - "mongodb"
    volumes:
      - "telegrambot:/home/docker-containers/scripts/telegrambot"

volumes:
  telegrambot:
    driver: "local"

Однако с этим файлом я получаю ошибку от самого docker, что не удается определить сеть:

docker-containers@asyncpydev:~/scripts/telegrambot$ docker compose up -d
WARN[0000] /home/docker-containers/scripts/telegrambot/docker-compose.yml: `version` is obsolete
service "telegrambot" refers to undefined network mongodb: invalid compose project

Если я попытаюсь определить сеть указав детально её данные в docker-compose файле самого python проекта, то при запуске контейнера создастся сеть с названием моего проекта и именем определенной сети, а то есть mongodb и в результате я получу новую сеть telegrambot_mongodb.

Когда я указываю сеть другим образом с её определением external: True, используется ранее мною созданная сеть mongodb, однако при попытке подключения к mongodb из python отображается ошибка что не удаётся подключиться. В итоге настроенная сеть для docker-compose файла, проекта python выглядит так:

version: "3.3"

services:
  telegrambot:
    networks:
      - "mongodb"

networks:
  mongodb:
    external: "true"

А получаемая ошибка:

  File "/usr/local/lib/python3.11/site-packages/pymongo/topology.py", line 259, in _select_servers_loop
    raise ServerSelectionTimeoutError(
pymongo.errors.ServerSelectionTimeoutError: mongodb:24680: [Errno 111] Connection refused (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms), Timeout: 30s, Topology Description: <TopologyDescription id: 662a35795d892bfc6c02627e, topology_type: Unknown, servers: [<ServerDescription ('mongodb', 24680) server_type: Unknown, rtt: None, error=AutoReconnect('mongodb:24680: [Errno 111] Connection refused (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms)')>]>

В тоже время docker-compose файл моей базы данных MongoDB выглядит так:

version: "3.3"

services:
  mongodb:
    image: "mongo:4.4.29"
    container_name: "mongodb"
    restart: "unless-stopped"
    stdin_open: "true"
    tty: "true"
    environment:
      MONGO_INITDB_ROOT_USERNAME: "myuser"
      MONGO_INITDB_ROOT_PASSWORD: "mypass"
      MONGO_INTIDB_DATABASE: "admin"
    ports:
      - "24680:27017"
    volumes:
      - "mongodb:$HOME/etc/mongodb/data/db"
    networks:
      - "mongodb"

networks:
  mongodb:
    external: "true"

volumes:
  mongodb:
    driver: "local"

После запуска базы данных MongoDB я могу полноценно пользоваться базой данных из Windows 10 Pro при помощи MongoDB Compass, только при использовании хостов 127.0.0.1 а также localhost с портом 24680. Также мой python проект спокойно подключается к базе данных, если он не находится в самом докер контейнере.

Я также проверял возможность подключения из самого docker контейнера с базой данных и авторизация удаётся:

docker exec -it mongodb mongo
use admin
db.auth("myuser", "mypass")

ifconfig на этом этапе отправляет мне, что не видит никаких дополнительных сетей от docker, что исключает вероятность использования других хостов, кроме как 127.0.0.1 а также localhost:

docker-containers@asyncpydev:~/etc/mongodb$ ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.23.232.238  netmask 255.255.240.0  broadcast 172.23.239.255
        inet6 fe80::215:5dff:fe5f:ec3c  prefixlen 64  scopeid 0x20<link>
        ether 00:15:5d:5f:ec:3c  txqueuelen 1000  (Ethernet)
        RX packets 7241  bytes 8644766 (8.6 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3113  bytes 323045 (323.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 12439  bytes 21334985 (21.3 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 12439  bytes 21334985 (21.3 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

У меня закончились варианты, как я мог бы осуществить подключение не определяя два сервиса в одном docker-compose файле, поэтому мне нужна ваша помощь.


Ответы (0 шт):