当前位置: 首页 > article >正文

Windows 结合 Docker 下使用 Django+Celery+Pool

前景提要:在mac环境中能正常使用的celery及pool多进程的各项功能,但是在Windows环境下无法正常使用,wsl踩过坑无法正常使用,遂切换到 Docker 方案

1、搭建Docker环境

我安装的是Docker桌面版,具体步骤不再赘述

2、编辑 dockerfile 文件

我的 dockerfile 文件放置在项目目录下

# 使用官方 Python 镜像作为基础镜像
FROM python:3.10.14
# 设置容器内的工作目录
WORKDIR /xxx
# 将 requirements.txt 复制到容器中的工作目录
COPY requirements.txt .
# 安装 Python 依赖项
RUN pip install --no-cache-dir -r requirements.txt
# 将应用程序代码复制到容器
COPY . .
# 设置环境变量
ENV PYTHONUNBUFFERED=1
# 公开端口
EXPOSE 8000
# 进行数据库迁移
RUN python manage.py migrate
# 指定容器启动时运行的命令
#CMD ["python", "main.py"]
CMD ["/backend/docker_start.sh"] # 我使用的是 dvadmin 项目中有该文件

3、编辑 docker-compose.yml 文件

我的 docker-compose.yml 与 dockerfile 文件放置在相同目录,因为redis、db服务在Windows环境下已经运行,所以不需要Docker启动这两个服务

version: '3.8'  # 指定 Docker Compose 版本
services:
  django:  # Django 应用服务
    build:  # 指定构建上下文
      context: .  # Dockerfile 的路径,相对于此 docker-compose.yml 文件
    command: python manage.py runserver 0.0.0.0:8000  # 运行 Django 开发服务器的命令
    ports:
      - "8000:8000"  # 将主机的 8000 端口映射到容器的 8000 端口
    environment:
      - DEBUG=1  # 设置环境变量,启用调试模式
      - DB_HOST=127.0.0.1  # 数据库服务的主机名
      - DB_NAME=stock_project  # 数据库名称
      - DB_USER=root  # 数据库用户
      - DB_PASSWORD=root  # 数据库密码
  celery-beat: # celery beat
    build: .
    command: celery -A application.celery beat --loglevel=info
  celery-worker: # celery worker
    build: .
    command: celery -A application.celery worker -B --loglevel=info

4、打开终端运行项目

docker-compose up --build

8000端口能够正常访问时基本代表启动成功,此时多进程任务也能成功运行。

注意:

在 Docker 容器中,127.0.0.1 指的是容器自身,而不是宿主机。您需要使用宿主机的实际 IP 地址或使用特定的域名。对于 Docker Desktop,您可以使用 host.docker.internal 来访问宿主机。
所以在 Django 项目中我将 DATABASE_HOST、REDIS_HOST 都配置成了host.docker.internal

DATABASE_HOST = 'host.docker.internal'
REDIS_HOST = 'host.docker.internal'

http://www.kler.cn/a/388478.html

相关文章:

  • 服务号消息折叠折射出的腾讯傲慢:上云会不会也一样?
  • 【2024最新】math-expression-evaluator 动态计算表达式的使用
  • 利用 Screen 保持 VSCode 连接远程任务持续运行
  • 通用项目工程的过程视图概览
  • C++开发基础之使用librabbitmq库实现RabbitMQ消息队列通信
  • 即插即用篇 | YOLOv8 引入 代理注意力 AgentAttention
  • [翻译]ANSI X9.24-3-2017
  • AI 刷题实践选题:精选真题功能的深度剖析与学习实践| 豆包MarsCode AI刷题
  • “双十一”电商狂欢进行时,在AI的加持下看网易云信IM、RTC如何助力商家!
  • UE5.4 PCG 执行后生成函数
  • Word大珩助手:超大数字怎么读?35位数字?69位数字?
  • 嵌入式学习-网络高级-Day01
  • 【青牛科技】应用方案 | D75xx-150mA三端稳压器
  • 如何在 HFSS 3D 布局中创建 cutout 子设计
  • goroutine 介绍
  • 我爸瘫痪,我们三兄弟每月出2500让嫂子伺候,得知我工资10000,嫂子打电话:你多给1000行吗?...
  • lua脚本调用 c/c++中的接口
  • Spring Shell——快速构建终端应用,自定义终端命令
  • Maven的依赖管理、传递、冲突、父子工程的继承和聚合
  • 题目讲解15 合并两个排序的链表
  • 易语言加载dll模拟windows鼠标轨迹移动
  • 对于大根堆的计算时间复杂度的过程
  • 【模板】如何实现链表元素的反转
  • ClickHouse创建分布式表
  • 用Java实现samza转换成flink
  • linprog函数在octave中的使用