Проблема с 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 шт):
Ошибка у вас состоит насколько мне понятно в том что контейнеры не могут видеть зависимости модулей друг друга
Вы можете монтировать исходники при создании контейнера (с помощью механизма volume) к каждому контейнеру, тогда вы сможете воссоздать свою структуру.