在docker/django中设置芹菜/redis的问题
以下是我当前的设置: requirements.txt在docker/django中设置芹菜/redis的问题,django,docker,redis,celery,Django,Docker,Redis,Celery,以下是我当前的设置: requirements.txt celery[redis] Dockerfile RUN curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash ENV PATH "/home/appuser/.pyenv/bin:$PATH" RUN echo "export PATH=/home/appuser/.pyenv/bin:$PATH" >>
celery[redis]
Dockerfile
RUN curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
ENV PATH "/home/appuser/.pyenv/bin:$PATH"
RUN echo "export PATH=/home/appuser/.pyenv/bin:$PATH" >> /home/appuser/.bashrc
RUN echo 'eval "$(pyenv init -)"' >> /home/appuser/.bashrc
RUN echo 'eval "$(pyenv virtualenv-init -)"' >> /home/appuser/.bashrc
RUN pyenv install 3.7.0
RUN pyenv global 3.7.0
ENV PATH "/home/appuser/.pyenv/versions/3.7.0/bin:$PATH"
WORKDIR /code
COPY ./back-python/project/requirements.txt /code/
RUN pip3 install --upgrade pip
RUN pip3 install -r requirements.txt
项目/设置
CELERY_BROKER_URL = 'redis://redis:6379/0'
CELERY_RESULT_BACKEND = 'redis://redis:6379/0'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
项目/init.py
from .celery import app as celery_app
__all__ = ['celery_app']
项目/芹菜.py
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
app = Celery('project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
docker-compose.yml
版本:“3”
services:
ui:
build: ./front-vue/.
volumes:
- ./front-vue/:/code
ports:
- "8888:8888"
links:
- django
command: "npm run dev"
redis:
restart: always
image: "redis:alpine"
sysctls:
- net.core.somaxconn=511
django:
build: .
volumes:
- ./back-python/project/:/code
- ./front-vue/dist/pwa/:/code/public
expose:
- "8000"
command: "python manage.py runserver [::]:8000"
depends_on:
- redis
celery:
build: .
command: celery -A project worker -l info
volumes:
- ./back-python/project/:/code
depends_on:
- redis
当我运行docker compose时,我不断地遇到这个错误
celery_1 | Traceback (most recent call last):
celery_1 | File "/home/appuser/.pyenv/versions/3.7.0/bin/celery", line 11, in <module>
celery_1 | sys.exit(main())
celery_1 | File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/__main__.py", line 16, in main
celery_1 | _main()
celery_1 | File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/bin/celery.py", line 322, in main
celery_1 | cmd.execute_from_commandline(argv)
celery_1 | File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/bin/celery.py", line 496, in execute_from_commandline
celery_1 | super(CeleryCommand, self).execute_from_commandline(argv)))
celery_1 | File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/bin/base.py", line 298, in execute_from_commandline
celery_1 | return self.handle_argv(self.prog_name, argv[1:])
celery_1 | File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/bin/celery.py", line 488, in handle_argv
celery_1 | return self.execute(command, argv)
celery_1 | File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/bin/celery.py", line 420, in execute
celery_1 | ).run_from_argv(self.prog_name, argv[1:], command=argv[0])
celery_1 | File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/bin/worker.py", line 223, in run_from_argv
celery_1 | return self(*args, **options)
celery_1 | File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/bin/base.py", line 252, in __call__
celery_1 | ret = self.run(*args, **kwargs)
celery_1 | File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/bin/worker.py", line 257, in run
celery_1 | **kwargs)
celery_1 | File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/worker/worker.py", line 101, in __init__
celery_1 | self.setup_instance(**self.prepare_args(**kwargs))
celery_1 | File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/worker/worker.py", line 124, in setup_instance
celery_1 | self.should_use_eventloop() if use_eventloop is None
celery_1 | File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/worker/worker.py", line 243, in should_use_eventloop
celery_1 | self._conninfo.transport.implements.asynchronous and
celery_1 | File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/kombu/connection.py", line 879, in transport
celery_1 | self._transport = self.create_transport()
celery_1 | File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/kombu/connection.py", line 600, in create_transport
celery_1 | return self.get_transport_cls()(client=self)
celery_1 | File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/kombu/transport/redis.py", line 1070, in __init__
celery_1 | raise ImportError('Missing redis library (pip install redis)')
celery_1 | ImportError: Missing redis library (pip install redis)
celery_1 exited with code 1
芹菜1 |回溯(最近一次呼叫最后一次):
芹菜1 |文件“/home/appuser/.pyenv/versions/3.7.0/bin/芹菜”,第11行,在
芹菜1 |系统出口(main())
芹菜1 |文件“/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site packages/cellery/_main.py”,第16行,主菜单
芹菜
芹菜1 |文件“/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site packages/celery/bin/celery.py”,第322行,主视图
芹菜1命令。从命令行(argv)执行
celery|1 |文件“/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site packages/celery/bin/celery.py”,第496行,从命令行执行
celery|1 | super(CeleryCommand,self)。从_命令行(argv)执行_)
celery|1 |文件“/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site packages/celery/bin/base.py”,第298行,从命令行执行
芹菜1 |返回self.handle_argv(self.prog_name,argv[1:])
芹菜1 |文件“/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site packages/celery/bin/celery.py”,第488行,在handle_argv中
芹菜1 |返回self.execute(命令,argv)
celery|1 |文件“/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site packages/celery/bin/celery.py”,执行中第420行
芹菜(1 |)。从(self.prog_name,argv[1:],command=argv[0])运行(u)
celery|1 |文件“/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site packages/celery/bin/worker.py”,第223行,从_argv运行
芹菜1 |返回自我(*参数,**选项)
芹菜1 |文件“/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site packages/芹菜/bin/base.py”,第252行,在|调用中__
芹菜1 | ret=self.run(*args,**kwargs)
芹菜1 |文件“/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site packages/celery/bin/worker.py”,第257行,运行中
芹菜(1 |**kwargs)
芹菜1 |文件“/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site packages/celery/worker/worker.py”,第101行,在| init中__
芹菜1 | self.setup_实例(**self.prepare_args(**kwargs))
celery|1 |文件“/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site packages/celery/worker/worker.py”,第124行,在安装程序实例中
芹菜1| self.如果use_eventloop为None,是否应使用_eventloop()
celery|1 |文件“/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site packages/celery/worker/worker.py”,第243行,应使用事件循环
芹菜1 | self.|conninfo.transport.implements.asynchronous and
芹菜1 |文件“/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site packages/kombu/connection.py”,第879行,运输中
芹菜|1|self._transport=self.create_transport()
芹菜1 |文件“/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site packages/kombu/connection.py”,第600行,在create|u transport中
芹菜1 |返回self.get_transport_cls()(client=self)
芹菜1 |文件“/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site packages/kombu/transport/redis.py”,第1070行,在| init中__
芹菜1 | raise ImportError('缺少redis库(pip安装redis)')
芹菜1 |导入错误:缺少redis库(pip安装redis)
芹菜1已退出,代码为1
我做了一些研究,看起来是因为redis安装在python2下,这对我来说毫无意义。。。有人知道会出现什么问题吗?更新:我确实运行了
docker compose--rm Cellery bash
,然后pip freeze
,但找不到redis,所以我这里缺少了一些东西docker文件中的基本图像是什么?(为什么不是python:3.7
?)。图像的CMD
是什么?@DavidMaze实际上我忘了在我的buildbash脚本中包含docker compose build芹菜。现在我觉得自己很笨。