python - 芹菜有时不会在 docker 中运行
问题描述
我一直在为这个而疯狂,我的 docker-compose.yml 中的芹菜服务只是不接受任务(有时)。它有时会起作用
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:
设置.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_A
and service_B
,这两个服务有时不会被启动。任何有助于理解奇怪行为的帮助都会非常有帮助!谢谢
解决方案
所以,我想我遇到了类似的问题。我正在拔头发,因为我正在更新我的worker.py,然后不仅自动加载不会反映任何更改,而且当我重新运行我docker-compose up
的更改时仍然不会反映。
有时,当我运行时,docker-compose up --build --force-recreate
我的更改会得到反映,但并不可靠。
我能够通过做两件事来解决这个问题:
- 删除
__pycache__
我的工作人员目录中的。 - 当缓存行为持续存在时
$ find . -name "*.pyc" -exec rm {} \;
,在执行之前运行。docker-compose up --build --force-recreate
我不是 100% 确定自己发生了什么,但很明显 Celery + Docker w/o autoload 意味着 Docker 倾向于使用已编译任务的缓存版本。我看到一些关于如何使用 Celery + Docker 设置自动加载以及 webdog 或 modd 等方法的讨论,但是,我还没有为我的项目设置它。
推荐阅读
- arrays - 如何快速将数据附加到 JSON 格式数组中?
- gradle - gradle:在一些嵌套子项目之间共享变量
- swift - 将 NSCoding 的值转换为字符串 - KeychainWrapper
- sql - 将带有偏移量的 DateString 转换为 Athena / Presto 中的有效日期/时间戳
- javascript - 如何使用 jQuery 获取每个选择器的兄弟姐妹
- node.js - 更新MongoDB中多个文档中的多个嵌入文档
- php - 在 tinyint 字段中按值 0 过滤 Eloquent 查询的问题
- python - 从格式不正确的 XML 中获取列名
- xslt - 在 PI XSLT 映射中将 xml 字段转换为键/值对
- chef-infra - 通过 Inspec 实现基础设施合规性