我一直在为此发疯,我的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:
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_A
和service_B
,这是有时不会被启动的两个服务。 任何有助于理解奇怪行为的帮助都将非常有帮助!谢谢
所以,我想我遇到了类似的问题。我拔掉头发,因为我正在更新我的 worker.py 然后不仅自动加载不会反映任何更改,而且当我重新运行我的docker-compose up
时,我的更改仍然不会反映。
有时,当我运行docker-compose up --build --force-recreate
时,我的更改会反映出来,但不可靠。
我能够通过做两件事来解决这个问题:
- 删除我的工作线程目录中的
__pycache__
。
在 - 缓存行为仍然存在时执行
docker-compose up --build --force-recreate
之前先运行$ find . -name "*.pyc" -exec rm {} ;
。
我不是 100% 确定自己发生了什么,但很明显,没有自动加载的 Celery + Docker 意味着 Docker 倾向于使用已编译任务的缓存版本。我看到一些关于如何使用 Celery + Docker 使用 webdog 或 modd 之类的东西设置自动加载的方法,但是,我还没有为我的项目设置它。