Testdriven.io: The Definitive Guide to Celery and Django. Во всех журналах контейнеров появляется сообщение "Waiting for PostgreSQL to become available...".
Я выполнил все шаги части 1 главы 4 и буквально скопировал код, как показано на рисунке.
docker-compose может создавать контейнеры, но я всегда получаю сообщение Waiting for PostgresSQL to become available, которое регистрируется во всех других контейнерах, как показано ниже. docker-compose logs
Ниже приведен вывод docker ps -a. Из него видно, что все контейнеры запущены на соответствующих портах. docker ps -a logs
Я проверил журналы docker container logs db, и он показывает, что запущен. postgres container logs
Но я не могу открыть сервер Django на порту 8010 и не могу просмотреть сервер цветов на порту 5557, потому что в логах контейнера я получаю сообщение "Waiting for PostgreSQL to become available..."
Кто-нибудь, пожалуйста, помогите. Эта проблема просто убивает меня. Я пытался просмотреть логи каждого контейнера, и он показывает, что запущен, но я не могу просмотреть Django и flower server.
Дайте мне знать, если вам понадобится больше информации.
Спасибо!
Попробовал проверить, запущена ли БД на нужном порту. проверил, запущен ли Redis. проверил логи каждого запущенного контейнера, которые указывают на одно и то же сообщение "Waiting for PostgreSQL to become available..."
psycopg2-binary. Использование psycopg2 вместо этого пакета помогло мне. Эта проблема может быть связана с Mac M1
У меня была такая же проблема с этим учебником (на mac M1), и это заняло у меня много часов. Решением для меня стало использование "alpine" вместо "buster", вот мой Dockerfile:
FROM alpine:3.17.1
ENV PYTHONUNBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1
RUN apk update \
&& apk add postgresql-dev gcc python3-dev musl-dev py3-pip bash
# Requirements are installed here to ensure they will be cached.
COPY ./requirements.txt /requirements.txt
RUN pip install -r /requirements.txt
COPY ./compose/local/django/entrypoint /entrypoint
RUN sed -i 's/\r$//g' /entrypoint
RUN chmod +x /entrypoint
COPY ./compose/local/django/start /start
RUN sed -i 's/\r$//g' /start
RUN chmod +x /start
COPY ./compose/local/django/celery/worker/start /start-celeryworker
RUN sed -i 's/\r$//g' /start-celeryworker
RUN chmod +x /start-celeryworker
COPY ./compose/local/django/celery/beat/start /start-celerybeat
RUN sed -i 's/\r$//g' /start-celerybeat
RUN chmod +x /start-celerybeat
COPY ./compose/local/django/celery/flower/start /start-flower
RUN sed -i 's/\r$//g' /start-flower
RUN chmod +x /start-flower
WORKDIR /app
ENTRYPOINT ["/entrypoint"]
requirements.txt:
django==4.1.4
celery==5.2.7
redis==4.3.4
flower==1.2.0
psycopg2-binary==2.9.5
И, возможно, это не связано напрямую, я добавил проверки запуска и здоровья в файл docker compose, так что вам не нужен опрос postgres "ready" в скрипте точки входа.
Вот мой docker-compose.yml:
version: '3.8'
services:
web:
build:
context: .
dockerfile: ./compose/local/django/Dockerfile
image: django_celery_example_web
command: /start
volumes:
- .:/app
ports:
- 8010:8000
env_file:
- ./.env/.dev-sample
depends_on:
redis:
condition: service_started
db:
condition: service_healthy
db:
image: postgres:14.6-alpine
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- POSTGRES_DB=hello_django
- POSTGRES_USER=hello_django
- POSTGRES_PASSWORD=hello_django
healthcheck:
test: ["CMD-SHELL", "pg_isready -U hello_django"]
interval: 5s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
networks:
- default
celery_worker:
build:
context: .
dockerfile: ./compose/local/django/Dockerfile
image: django_celery_example_celery_worker
command: /start-celeryworker
volumes:
- .:/app
env_file:
- ./.env/.dev-sample
networks:
- default
depends_on:
redis:
condition: service_started
db:
condition: service_healthy
celery_beat:
build:
context: .
dockerfile: ./compose/local/django/Dockerfile
image: django_celery_example_celery_beat
command: /start-celerybeat
volumes:
- .:/app
env_file:
- ./.env/.dev-sample
depends_on:
redis:
condition: service_started
db:
condition: service_healthy
flower:
build:
context: .
dockerfile: ./compose/local/django/Dockerfile
image: django_celery_example_celery_flower
command: /start-flower
volumes:
- .:/app
env_file:
- ./.env/.dev-sample
ports:
- 5557:5555
depends_on:
redis:
condition: service_started
db:
condition: service_healthy
volumes:
postgres_data: