在docker/django中设置芹菜/redis的问题

在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" >>

以下是我当前的设置:

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" >> /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芹菜。现在我觉得自己很笨。