Команда Celery не найдена при запуске из сценария точки входа Docker

Я разворачиваю приложение Django с помощью Docker на ECS и столкнулся с проблемой, когда команды Celery, указанные в моем скрипте entrypoint.sh, не распознаются, что приводит к ошибкам. Моя настройка Docker предполагает использование Celery для асинхронной обработки задач, с отдельными контейнерами для Celery workers и beat scheduled tasks. Я получаю следующие сообщения об ошибках, когда создаю ECS, включающий рабочий Celery и beat в качестве контейнеров в рамках одного определения задачи.

Сообщения об ошибках:

/app/entrypoint.sh: line 28: exec: celery -A healthcare_project worker -l info: not found
/app/entrypoint.sh: line 28: exec: celery -A healthcare_project beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler: not found

Сценарий точки входа (entrypoint.sh):

#!/bin/bash

# Exit script in case of error
set -e

# Apply database migrations
echo "Applying database migrations..."
python manage.py migrate --noinput

# Collect static files
echo "Collecting static files..."
python manage.py collectstatic --noinput --clear

# Debugging: List installed packages and show PATH
echo "Installed Python packages:"
pip freeze
echo "Current PATH in Docker: $PATH"

# Check if celery command is passed
if [[ "$1" == "celery" ]]; then
    # Shift command line arguments left
    shift 1
    # Execute the celery command with the passed arguments
    exec /usr/local/bin/celery -A healthcare_project "$@"
else
    # Start command passed to the script. For example:
    # if passed "gunicorn", it starts Gunicorn; if passed "daphne", it starts Daphne
    exec "$@"
fi

Dockerfile

# Use an official Python runtime as a parent image
FROM python:3.9-slim

# Set environment variables
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

# Set work directory
WORKDIR /app

# Install dependencies
COPY HealthApp/requirements.txt /app/
RUN pip install --upgrade pip && pip install -r requirements.txt

# Copy the application files from healthcare_project
COPY . /app/

# Copy the shared entrypoint script
# The entrypoint.sh file is now within the HealthApp directory
COPY HealthApp/entrypoint.sh /app/
RUN chmod +x /app/entrypoint.sh

# Expose port 8000 for web connections
EXPOSE 8000

# Use the entrypoint script to configure the container
ENTRYPOINT ["/app/entrypoint.sh"]

# Start Gunicorn for the Django project
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "healthcare_project.wsgi:application"]

Попытки решения:

1. Убедитесь, что Celery установлен, проверив его с помощью pip freeze.

2. Проверьте PATH и убедитесь, что /usr/local/bin включен.

3. Сельдерей присутствует в файле requirements.txt

Несмотря на эти попытки, проблема сохраняется. Как правильно настроить сценарий entrypoint.sh, чтобы он распознавал и выполнял команды Celery без ошибок?

Вернуться на верх