Проблема с docker-compose, которую я не могу решить

Всем привет. Редко обращаюсь сюда, скажем так последняя инстанция. Я правда уже разочаровался во всем, поэтому прошу вас помочь. Я закончил локальную разработку проекта на Django, с использованием технологий celery, redis и т.п. В данный момент, я хочу загрузить свой сайт в контейнеры, чтобы посмотреть, как он будет работать и потом деплойнуть его на сервер. Но, при сборке контейнеров, при запуске всего у меня вылетают ошибки.

[+] Running 6/6d orphan containers ([django-poligon-it-telegram-1]) for this project. If you removed or renamed this service in your compose ✔ Network django-poligon-it_default          Created                                                                                  0.2s 
 ✔ Container django-poligon-it-redis-1        Created                                                                                  0.7s 
 ✔ Container django-poligon-it-db-1           Created                                                                                  0.7s 
 ✔ Container django-poligon-it-web-1          Created                                                                                  0.1s 
 ✔ Container django-poligon-it-celery-1       Created                                                                                  0.1s 
 ✔ Container django-poligon-it-celery-beat-1  Created                                                                                  0.1s 
Attaching to celery-1, celery-beat-1, db-1, redis-1, web-1
redis-1        | 1:C 31 Mar 2025 20:28:28.259 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis-1        | 1:C 31 Mar 2025 20:28:28.259 # Redis version=6.2.17, bits=64, commit=00000000, modified=0, pid=1, just started
redis-1        | 1:C 31 Mar 2025 20:28:28.259 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
redis-1        | 1:M 31 Mar 2025 20:28:28.259 * monotonic clock: POSIX clock_gettime
redis-1        | 1:M 31 Mar 2025 20:28:28.260 * Running mode=standalone, port=6379.
redis-1        | 1:M 31 Mar 2025 20:28:28.260 # Server initialized
redis-1        | 1:M 31 Mar 2025 20:28:28.260 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
redis-1        | 1:M 31 Mar 2025 20:28:28.261 * Ready to accept connections
db-1           | 
db-1           | PostgreSQL Database directory appears to contain a database; Skipping initialization
db-1           | 
db-1           | 2025-03-31 20:28:28.348 UTC [1] LOG:  starting PostgreSQL 13.20 (Debian 13.20-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
db-1           | 2025-03-31 20:28:28.348 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
db-1           | 2025-03-31 20:28:28.348 UTC [1] LOG:  listening on IPv6 address "::", port 5432
db-1           | 2025-03-31 20:28:28.355 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db-1           | 2025-03-31 20:28:28.403 UTC [27] LOG:  database system was shut down at 2025-03-31 20:26:17 UTC
db-1           | 2025-03-31 20:28:28.411 UTC [1] LOG:  database system is ready to accept connections
web-1          | [2025-03-31 20:28:28 +0000] [1] [INFO] Starting gunicorn 20.1.0
web-1          | [2025-03-31 20:28:28 +0000] [1] [INFO] Listening at: http://0.0.0.0:8000 (1)
web-1          | [2025-03-31 20:28:28 +0000] [1] [INFO] Using worker: sync
web-1          | [2025-03-31 20:28:28 +0000] [7] [INFO] Booting worker with pid: 7
web-1          | [2025-03-31 20:28:28 +0000] [7] [ERROR] Exception in worker process
web-1          | Traceback (most recent call last):
web-1          |   File "/usr/local/lib/python3.9/site-packages/gunicorn/arbiter.py", line 589, in spawn_worker
web-1          |     worker.init_process()
web-1          |   File "/usr/local/lib/python3.9/site-packages/gunicorn/workers/base.py", line 134, in init_process
web-1          |     self.load_wsgi()
web-1          |   File "/usr/local/lib/python3.9/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi
web-1          |     self.wsgi = self.app.wsgi()
web-1          |   File "/usr/local/lib/python3.9/site-packages/gunicorn/app/base.py", line 67, in wsgi
web-1          |     self.callable = self.load()
web-1          |   File "/usr/local/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py", line 58, in load
web-1          |     return self.load_wsgiapp()
web-1          |   File "/usr/local/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp
web-1          |     return util.import_app(self.app_uri)
web-1          |   File "/usr/local/lib/python3.9/site-packages/gunicorn/util.py", line 359, in import_app
web-1          |     mod = importlib.import_module(module)
web-1          |   File "/usr/local/lib/python3.9/importlib/__init__.py", line 127, in import_module
web-1          |     return _bootstrap._gcd_import(name[level:], package, level)
web-1          |   File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
web-1          |   File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
web-1          |   File "<frozen importlib._bootstrap>", line 972, in _find_and_load_unlocked
web-1          |   File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
web-1          |   File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
web-1          |   File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
web-1          |   File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
web-1          | ModuleNotFoundError: No module named 'poligon_it'
web-1          | [2025-03-31 20:28:28 +0000] [7] [INFO] Worker exiting (pid: 7)
web-1          | [2025-03-31 20:28:28 +0000] [1] [INFO] Shutting down: Master
web-1          | [2025-03-31 20:28:28 +0000] [1] [INFO] Reason: Worker failed to boot.
celery-1       | Traceback (most recent call last):
celery-1       |   File "/usr/local/bin/celery", line 8, in <module>
celery-1       |     sys.exit(main())
celery-1       |   File "/usr/local/lib/python3.9/site-packages/celery/__main__.py", line 15, in main
celery-1       |     sys.exit(_main())
celery-1       |   File "/usr/local/lib/python3.9/site-packages/celery/bin/celery.py", line 236, in main
celery-1       |     return celery(auto_envvar_prefix="CELERY")
celery-1       |   File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1161, in __call__
celery-1       |     return self.main(*args, **kwargs)
celery-1       |   File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1082, in main
celery-1       |     rv = self.invoke(ctx)
celery-1       |   File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1695, in invoke
celery-beat-1  | Traceback (most recent call last):
celery-1       |     sub_ctx = cmd.make_context(cmd_name, args, parent=ctx)
celery-beat-1  |   File "/usr/local/bin/celery", line 8, in <module>
celery-1       |   File "/usr/local/lib/python3.9/site-packages/click/core.py", line 949, in make_context
celery-beat-1  |     sys.exit(main())
celery-1       |     self.parse_args(ctx, args)
celery-beat-1  |   File "/usr/local/lib/python3.9/site-packages/celery/__main__.py", line 15, in main
celery-1       |   File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1417, in parse_args
celery-beat-1  |     sys.exit(_main())
celery-1       |     value, args = param.handle_parse_result(ctx, opts, args)
celery-beat-1  |   File "/usr/local/lib/python3.9/site-packages/celery/bin/celery.py", line 236, in main
celery-1       |   File "/usr/local/lib/python3.9/site-packages/click/core.py", line 2403, in handle_parse_result
celery-1       |     value = self.process_value(ctx, value)
celery-1       |   File "/usr/local/lib/python3.9/site-packages/click/core.py", line 2365, in process_value
celery-beat-1  |     return celery(auto_envvar_prefix="CELERY")
celery-1       |     value = self.callback(ctx, self, value)
celery-beat-1  |   File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1161, in __call__
celery-1       |   File "/usr/local/lib/python3.9/site-packages/celery/bin/worker.py", line 158, in <lambda>
celery-1       |     value: value or ctx.obj.app.conf.worker_state_db,
celery-1       |   File "/usr/local/lib/python3.9/site-packages/celery/utils/collections.py", line 111, in __getattr__
celery-1       |     return self[k]
celery-1       |   File "/usr/local/lib/python3.9/site-packages/celery/utils/collections.py", line 391, in __getitem__
celery-1       |     return getitem(k)
celery-1       |   File "/usr/local/lib/python3.9/site-packages/celery/utils/collections.py", line 249, in __getitem__
celery-beat-1  |     return self.main(*args, **kwargs)
celery-1       |     return mapping[_key]
celery-beat-1  |   File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1082, in main
celery-1       |   File "/usr/local/lib/python3.9/collections/__init__.py", line 1054, in __getitem__
celery-beat-1  |     rv = self.invoke(ctx)
celery-1       |     if key in self.data:
celery-1       |   File "/usr/local/lib/python3.9/site-packages/kombu/utils/objects.py", line 40, in __get__
celery-beat-1  |   File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1695, in invoke
celery-beat-1  |     sub_ctx = cmd.make_context(cmd_name, args, parent=ctx)
celery-beat-1  |   File "/usr/local/lib/python3.9/site-packages/click/core.py", line 949, in make_context
celery-1       |     return super().__get__(instance, owner)
celery-beat-1  |     self.parse_args(ctx, args)
celery-1       |   File "/usr/local/lib/python3.9/functools.py", line 993, in __get__
celery-beat-1  |   File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1417, in parse_args
celery-1       |     val = self.func(instance)
celery-beat-1  |     value, args = param.handle_parse_result(ctx, opts, args)
celery-1       |   File "/usr/local/lib/python3.9/site-packages/celery/app/base.py", line 136, in data
celery-beat-1  |   File "/usr/local/lib/python3.9/site-packages/click/core.py", line 2403, in handle_parse_result
celery-1       |     return self.callback()
celery-1       |   File "/usr/local/lib/python3.9/site-packages/celery/app/base.py", line 981, in _finalize_pending_conf
celery-1       |     conf = self._conf = self._load_config()
celery-beat-1  |     value = self.process_value(ctx, value)
celery-1       |   File "/usr/local/lib/python3.9/site-packages/celery/app/base.py", line 997, in _load_config
celery-beat-1  |   File "/usr/local/lib/python3.9/site-packages/click/core.py", line 2365, in process_value
celery-1       |     self.loader.config_from_object(self._config_source)
celery-beat-1  |     value = self.callback(ctx, self, value)
celery-1       |   File "/usr/local/lib/python3.9/site-packages/celery/loaders/base.py", line 127, in config_from_object
celery-beat-1  |   File "/usr/local/lib/python3.9/site-packages/celery/bin/beat.py", line 22, in <lambda>
celery-1       |     self._conf = force_mapping(obj)
celery-beat-1  |     callback=lambda ctx, _, value: value or ctx.obj.app.conf.beat_schedule_filename,
celery-1       |   File "/usr/local/lib/python3.9/site-packages/celery/utils/collections.py", line 42, in force_mapping
celery-beat-1  |   File "/usr/local/lib/python3.9/site-packages/celery/utils/collections.py", line 111, in __getattr__
celery-1       |     if isinstance(m, (LazyObject, LazySettings)):
celery-beat-1  |     return self[k]
celery-1       |   File "/usr/local/lib/python3.9/site-packages/django/utils/functional.py", line 295, in __getattribute__
celery-beat-1  |   File "/usr/local/lib/python3.9/site-packages/celery/utils/collections.py", line 391, in __getitem__
celery-1       |     value = super().__getattribute__(name)
celery-beat-1  |     return getitem(k)
celery-beat-1  |   File "/usr/local/lib/python3.9/site-packages/celery/utils/collections.py", line 249, in __getitem__
celery-beat-1  |     return mapping[_key]
celery-beat-1  |   File "/usr/local/lib/python3.9/collections/__init__.py", line 1054, in __getitem__
celery-beat-1  |     if key in self.data:
celery-beat-1  |   File "/usr/local/lib/python3.9/site-packages/kombu/utils/objects.py", line 40, in __get__
celery-beat-1  |     return super().__get__(instance, owner)
celery-beat-1  |   File "/usr/local/lib/python3.9/functools.py", line 993, in __get__
celery-beat-1  |     val = self.func(instance)
celery-1       |   File "/usr/local/lib/python3.9/site-packages/django/utils/functional.py", line 266, in inner
celery-beat-1  |   File "/usr/local/lib/python3.9/site-packages/celery/app/base.py", line 136, in data
celery-1       |     self._setup()
celery-beat-1  |     return self.callback()
celery-1       |   File "/usr/local/lib/python3.9/site-packages/django/conf/__init__.py", line 89, in _setup
celery-beat-1  |   File "/usr/local/lib/python3.9/site-packages/celery/app/base.py", line 981, in _finalize_pending_conf
celery-1       |     self._wrapped = Settings(settings_module)
celery-beat-1  |     conf = self._conf = self._load_config()
celery-1       |   File "/usr/local/lib/python3.9/site-packages/django/conf/__init__.py", line 217, in __init__
celery-beat-1  |   File "/usr/local/lib/python3.9/site-packages/celery/app/base.py", line 997, in _load_config
celery-1       |     mod = importlib.import_module(self.SETTINGS_MODULE)
celery-beat-1  |     self.loader.config_from_object(self._config_source)
celery-1       |   File "/usr/local/lib/python3.9/importlib/__init__.py", line 127, in import_module
celery-beat-1  |   File "/usr/local/lib/python3.9/site-packages/celery/loaders/base.py", line 127, in config_from_object
celery-1       |     return _bootstrap._gcd_import(name[level:], package, level)
celery-beat-1  |     self._conf = force_mapping(obj)
celery-1       |   File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
celery-1       |   File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
celery-1       |   File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
celery-beat-1  |   File "/usr/local/lib/python3.9/site-packages/celery/utils/collections.py", line 42, in force_mapping
celery-1       | ModuleNotFoundError: No module named 'poligon_it.settings'
celery-beat-1  |     if isinstance(m, (LazyObject, LazySettings)):
celery-beat-1  |   File "/usr/local/lib/python3.9/site-packages/django/utils/functional.py", line 295, in __getattribute__
celery-beat-1  |     value = super().__getattribute__(name)
celery-beat-1  |   File "/usr/local/lib/python3.9/site-packages/django/utils/functional.py", line 266, in inner
celery-beat-1  |     self._setup()
celery-beat-1  |   File "/usr/local/lib/python3.9/site-packages/django/conf/__init__.py", line 89, in _setup
celery-beat-1  |     self._wrapped = Settings(settings_module)
celery-beat-1  |   File "/usr/local/lib/python3.9/site-packages/django/conf/__init__.py", line 217, in __init__
celery-beat-1  |     mod = importlib.import_module(self.SETTINGS_MODULE)
celery-beat-1  |   File "/usr/local/lib/python3.9/importlib/__init__.py", line 127, in import_module
celery-beat-1  |     return _bootstrap._gcd_import(name[level:], package, level)
celery-beat-1  |   File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
celery-beat-1  |   File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
celery-beat-1  |   File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
celery-beat-1  | ModuleNotFoundError: No module named 'poligon_it.settings'

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

docker-compose.yml

version: '3.8'

services:
  web:
    build: .
    working_dir: /app
    command: ["gunicorn", "poligon_it.wsgi:application", "--bind", "0.0.0.0:8000"]
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    depends_on:
      - db
      - redis
    env_file:
      - .env

  db:
    image: postgres:13
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: ${DATABASE_NAME}
      POSTGRES_USER: ${DATABASE_USER}
      POSTGRES_PASSWORD: ${DATABASE_PASSWORD}

  redis:
    image: redis:6
    ports:
      - "6379:6379"

  celery:
    build: .
    working_dir: /app
    command: ["celery", "-A", "poligon_it.poligon_it", "worker", "--loglevel=info"]
    depends_on:
      - redis
      - db
    env_file:
      - .env

  celery-beat:
    build: .
    working_dir: /app
    command: ["celery", "-A", "poligon_it.poligon_it", "beat", "--loglevel=info"]
    depends_on:
      - redis
      - db
    env_file:
      - .env

volumes:
  postgres_data:

Dockerfile

FROM python:3.9-slim


RUN apt-get update && apt-get install -y \
    build-essential \
    libpq-dev \
    && rm -rf /var/lib/apt/lists/*


RUN pip install --upgrade pip


WORKDIR /app
COPY . /app/


RUN pip install -r requirements.txt


CMD ["gunicorn", "poligon_it.wsgi:application", "--bind", "0.0.0.0:8000"]

Если вам также понадобится репозиторий, то вот, https://github.com/fdavis10/Django-Poligon-IT


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

Автор решения: Github Runner

Ошибка у вас состоит насколько мне понятно в том что контейнеры не могут видеть зависимости модулей друг друга

Вы можете монтировать исходники при создании контейнера (с помощью механизма volume) к каждому контейнеру, тогда вы сможете воссоздать свою структуру.

→ Ссылка