我想在码头集装箱内运行芹菜,并且由于某种原因它永远不会更新。每当我在tasks.py
中添加新函数或更新现有函数时,即使在重新启动容器后,它也不会向芹菜注册。奇怪的码头+芹菜Bug
这里是我的dockerfile
:
# start with a base image
FROM python:3.4-slim
ENV REDIS_IP 1.1.1.111
ENV REDIS_PORT 6379
ENV REDIS_DB 0
# install dependencies
RUN apt-get update && apt-get install -y \
apt-utils \
nginx \
supervisor \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
RUN echo "America/New_York" > /etc/timezone; dpkg-reconfigure -f noninteractive tzdata
# update working directories
ADD ./app /app
ADD ./config /config
ADD requirements.txt/
# install dependencies
RUN pip install --upgrade pip
RUN pip3 install -r requirements.txt
# setup config
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
RUN rm /etc/nginx/sites-enabled/default
RUN ln -s /config/nginx.conf /etc/nginx/sites-enabled/
RUN ln -s /config/supervisor.conf /etc/supervisor/conf.d/
EXPOSE 80
CMD ["supervisord", "-n"]
然后我supervisor.conf
:
[program:app]
command = uwsgi --ini /config/app.ini
autostart=true
autorestart=true
[program:nginx]
command = service nginx restart
autostart=true
autorestart=true
[program:celery]
directory = /app
command = celery -A tasks.celery worker -P eventlet -c 1000
autostart=true
autorestart=true
我tasks.py
:
import os
from celery import Celery
from app import app as flask_app
def make_celery(app):
celery = Celery(app.import_name, backend='redis://{0}:{1}/{2}'.format(os.environ['REDIS_IP'],os.environ['REDIS_PORT'],os.environ['REDIS_DB']),
broker='redis://{0}:{1}/{2}'.format(os.environ['REDIS_IP'],os.environ['REDIS_PORT'],os.environ['REDIS_DB']))
celery.conf.update(
CELERY_ENABLE_UTC=True,
CELERY_TIMEZONE='America/New_York'
)
TaskBase = celery.Task
class ContextTask(TaskBase):
abstract = True
def __call__(self, *args, **kwargs):
with app.app_context():
return TaskBase.__call__(self, *args, **kwargs)
celery.Task = ContextTask
return celery
celery = make_celery(flask_app)
@celery.task()
def add_together(a, b):
return a+ b
@celery.task()
def multiply(a,b)
return a*b
,由于某种原因:
- 我有21名工人登记和
multiply
永远不会被注册, - 还当我修改
add_together
,甚至当我重新启动容器,从来没有登记为好,。
我开始我的容器:
docker build --rm -t myapp .
docker run -d -p 88:80 -v $(pwd)/app:/app --name=myapp myapp
和restart:
docker restart myapp
我也曾尝试
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
,然后重新整个应用程序。没什么帮助。任何想法都会非常赞赏。
你用'--no-cache'重建了吗? – user2915097
@ user2915097我在https://docs.docker.com/engine/reference/commandline/build/上得到'unknown flag:--no-cache' – Jonathan
我看到了--no-cache在构建image – user2915097