Команда 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 без ошибок?