【问题标题】:Celery not running at times in docker芹菜有时不会在 docker 中运行
【发布时间】:2020-05-06 03:46:39
【问题描述】:

我一直在为这个而疯狂,我的 docker-compose.yml 中的 celery 服务只是不接任务(有时)。虽然有时会起作用

Dockerfile:

FROM python:3.6
RUN apt-get update

RUN mkdir /web_back
WORKDIR /web_back

COPY web/requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt


COPY web/ .

docker-compose.yml (为了便于理解,取出了一些服务)

version: '3'
services:

  web_serv:
    restart: always
    build: .
    container_name: web_back_01
    env_file:
      - ./envs/web_back_01.env
    volumes:
      - ./web/:/web_back
    depends_on:
      - web_postgres
    expose:
      - 8282
    extra_hosts:
      - "dockerhost:104.10.4.11"
    command: bash -c "./initiate.sh"

  service_A:
    restart: always
    build: ../../web-service-A/A/
    container_name: web_back_service_a_01
    volumes:
      - ../../web-service-A/A.:/web-service-A
    depends_on:
      - web
    ports:
      - '5100:5100'
    command: bash -c "python server.py"

  service_B:
    restart: always
    build: ../../web-service-B/B/
    container_name: web_back_service_b_01
    volumes:
      - ../../web-service-B/B.:/web-service-B
    depends_on:
      - web
    ports:
      - '5200:5200'
    command: bash -c "python server.py"

  web_postgres:
    restart: always
    build: ./postgres
    container_name: web_postgres_01
    #    restart: unless-stopped
    ports:
      - "5433:5432"
    environment:   # will be used by the init script
      LC_ALL: C.UTF-8
      POSTGRES_USER: web
      POSTGRES_PASSWORD: web
      POSTGRES_DB: web
    volumes:
      - pgdata:/var/lib/postgresql/data/


  nginx:
    restart: always
    build: ./nginx/
    container_name: web_nginx_01
    volumes:
      - ./nginx/:/etc/nginx/conf.d
      - ./logs/:/code/logs
      - ./web/static/:/static_cdn/
      - ./web/media/:/media_cdn/
    ports:
      - "80:80"
    links:
      - web_serv
  redis:
    restart: always
    container_name: web_redis_01
    ports:
      - "6379:6379"
    links:
      - web_serv
    image: redis
  celery:
    build: .
    volumes:
      - ./web/:/web_back
    container_name: web_celery_01
    command: celery -A web worker -l info
    links:
      - redis
    depends_on:
      - redis
volumes:
  pgdata:
  media:
  static:

settings.py

CELERY_BROKER_URL = 'redis://redis:6379'
CELERY_RESULT_BACKEND = 'redis://redis:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'

注意service_Aservice_B,这两个服务有时不会启动。 任何有助于理解奇怪行为的帮助都会非常有帮助!谢谢

【问题讨论】:

  • 有人吗?非常感谢任何帮助。

标签: python django docker-compose celery


【解决方案1】:

所以,我认为我遇到了类似的问题。我正在拔头发,因为我正在更新我的 worker.py,然后不仅自动加载不会反映任何更改,而且当我重新运行我的 docker-compose up 时,我的更改仍然不会反映。

有时当我运行 docker-compose up --build --force-recreate 时,我的更改会得到反映,但并不可靠。

我可以通过做两件事来解决这个问题:

  1. 删除我工作人员目录中的__pycache__
  2. 当缓存行为仍然存在时,在执行 docker-compose up --build --force-recreate 之前运行 $ find . -name "*.pyc" -exec rm {} \;

我不是 100% 确定自己发生了什么,但很明显 Celery + Docker w/o autoload 意味着 Docker 倾向于使用已编译任务的缓存版本。我看到一些关于使用 Celery + Docker 使用 webdog 或 modd 等设置自动加载的方法的讨论,但是,我还没有为我的项目设置它。

【讨论】:

    猜你喜欢
    • 2019-01-15
    • 2021-05-08
    • 2021-08-22
    • 2022-01-27
    • 2015-07-05
    • 2019-02-26
    • 2022-01-21
    • 2015-10-09
    • 2018-03-07
    相关资源
    最近更新 更多