docker-compose 中的所有容器日志都是“等待 PostgreSQL 可用...”

问题描述 投票:0回答:2

我已经遵循了 testdriven.io 课程的每个步骤:“Celery 和 Django 权威指南”,并且正在学习第 1 部分第 4 章,并逐字复制粘贴代码,如图所示。

docker-compose 能够构建容器,但我总是从所有其他容器记录等待 PostgresSQL 变得可用,如下所示。 docker-compose 日志

以下是 docker ps -a 的输出。从中我可以看到所有容器都在各自的端口中运行。 docker ps -a 日志

我检查了数据库的 docker 容器日志,它显示正在运行。 postgres 容器日志

但是,我无法在端口 8010 上打开 Django 服务器,也无法在端口 5557 上查看 Flower 服务器,因为在容器日志中我收到消息“等待 PostgreSQL 可用...”

请有人帮忙。这个问题快要死我了。我尝试查看每个容器的日志,它显示它正在运行,但我无法查看 Django 和 Flower 服务器。

如果你们需要更多信息,请告诉我。

尝试检查数据库是否已启动并在正确的端口上运行。 检查 Redis 是否正在运行。 检查每个正在运行的容器的日志,该日志指向相同的消息“等待 PostgreSQL 变得可用...”

django docker-compose celery
2个回答
0
投票

使用psycopg2-二进制包。 使用 psycopg2 相反对我有用。 这个问题可能与Mac M1有关


0
投票

我在本教程中遇到了同样的问题(在 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"]

需求.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:
© www.soinside.com 2019 - 2024. All rights reserved.