You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker-Compose运行Celery Worker时出现源码含空字节错误求助

问题:Docker中运行Celery报错“源码字符串不能包含空字节”,本地VS Code运行正常

环境信息

使用的Dockerfile

FROM tiangolo/uvicorn-gunicorn:python3.10-slim

COPY . /app
WORKDIR /app

RUN pip install -r requirements.txt

CMD celery worker -B --app=worker.worker.celery --loglevel=debug

报错信息

momo-api-worker-1  | During handling of the above exception, another exception occurred:
momo-api-worker-1  | 
momo-api-worker-1  | Traceback (most recent call last):
momo-api-worker-1  |   File "/usr/local/bin/celery", line 8, in <module>
momo-api-worker-1  |     sys.exit(main())
momo-api-worker-1  |   File "/usr/local/lib/python3.10/site-packages/celery/__main__.py", line 16, in main
momo-api-worker-1  |     _main()
momo-api-worker-1  |   File "/usr/local/lib/python3.10/site-packages/celery/bin/celery.py", line 322, in main
momo-api-worker-1  |     cmd.execute_from_commandline(argv)
momo-api-worker-1  |   File "/usr/local/lib/python3.10/site-packages/celery/bin/celery.py", line 499, in execute_from_commandline
momo-api-worker-1  |     super(CeleryCommand, self).execute_from_commandline(argv)))
momo-api-worker-1  |   File "/usr/local/lib/python3.10/site-packages/celery/bin/base.py", line 289, in execute_from_commandline
momo-api-worker-1  |     argv = self.setup_app_from_commandline(argv)
momo-api-worker-1  |   File "/usr/local/lib/python3.10/site-packages/celery/bin/base.py", line 509, in setup_app_from_commandline
momo-api-worker-1  |     self.app = self.find_app(app)
momo-api-worker-1  |   File "/usr/local/lib/python3.10/site-packages/celery/bin/base.py", line 531, in find_app
momo-api-worker-1  |     return find_app(app, symbol_by_name=self.symbol_by_name)
momo-api-worker-1  |   File "/usr/local/lib/python3.10/site-packages/celery/app/utils.py", line 373, in find_app
momo-api-worker-1  |     sym = symbol_by_name(app, imp=imp)
momo-api-worker-1  |   File "/usr/local/lib/python3.10/site-packages/celery/bin/base.py", line 534, in symbol_by_name
momo-api-worker-1  |     return imports.symbol_by_name(name, imp=imp)
momo-api-worker-1  |   File "/usr/local/lib/python3.10/site-packages/kombu/utils/imports.py", line 59, in symbol_by_name
momo-api-worker-1  |     reraise(ValueError,
momo-api-worker-1  |   File "/usr/local/lib/python3.10/site-packages/vine/five.py", line 194, in reraise
momo-api-worker-1  |     raise value.with_traceback(tb)
momo-api-worker-1  |   File "/usr/local/lib/python3.10/site-packages/kombu/utils/imports.py", line 57, in symbol_by_name
momo-api-worker-1  |     module = imp(module_name, package=package, **kwargs)
momo-api-worker-1  |   File "/usr/local/lib/python3.10/site-packages/celery/utils/imports.py", line 111, in import_from_cwd
momo-api-worker-1  |     return imp(module, package=package)
momo-api-worker-1  |   File "/usr/local/lib/python3.10/importlib/__init__.py", line 126, in import_module
momo-api-worker-1  |     return _bootstrap._gcd_import(name[level:], package, level)
momo-api-worker-1  |   File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
momo-api-worker-1  |   File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
momo-api-worker-1  |   File "<frozen importlib._bootstrap>", line 992, in _find_and_load_unlocked
momo-api-worker-1  |   File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
momo-api-worker-1  |   File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
momo-api-flower-1  | [I 230214 17:01:48 mixins:225] Connected to redis://redis:6379/0
momo-api-worker-1  |   File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
momo-api-worker-1  |   File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
momo-api-worker-1  |   File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
momo-api-worker-1  |   File "<frozen importlib._bootstrap_external>", line 883, in exec_module
momo-api-worker-1  |   File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
momo-api-worker-1  |   File "/app/worker/__init__.py", line 1, in <module>
momo-api-worker-1  |     from .worker import celery
momo-api-worker-1  |   File "/app/worker/worker.py", line 5, in <module>
momo-api-worker-1  |     from container import init_container
momo-api-worker-1  |   File "/app/container.py", line 15, in <module>
momo-api-worker-1  |     from services import *
momo-api-worker-1  |   File "/app/services/__init__.py", line 2, in <module>
momo-api-worker-1  |     from .push_notifications import *
momo-api-worker-1  |   File "/app/services/push_notifications.py", line 1, in <module>
momo-api-worker-1  |     from exponent_server_sdk import PushClient, PushMessage
momo-api-worker-1  |   File "/usr/local/lib/python3.10/site-packages/exponent_server_sdk/__init__.py", line 4, in <module>
momo-api-worker-1  |     import requests
momo-api-worker-1  |   File "/usr/local/lib/python3.10/site-packages/requests/__init__.py", line 147, in <module>
momo-api-worker-1  |     from . import packages, utils
momo-api-worker-1  |   File "/usr/local/lib/python3.10/site-packages/requests/packages.py", line 16, in <module>
momo-api-worker-1  |     locals()[package] = __import__(package)
momo-api-worker-1  | ValueError: Couldn't import 'worker.worker.celery': source code string cannot contain null bytes

VS Code本地启动配置(运行正常)

{
            "name": "Worker",
            "type": "python",
            "request": "launch",
            "module": "celery",
            "args": [
                "worker",
                "-B",
                "--app=worker.worker.celery",
                "--loglevel=debug"
            ],
            "jinja": true,
            "justMyCode": true
        }

原因分析

  1. 冗余文件带入容器:本地开发环境的缓存文件(如__pycache__、.pyc)、编辑器临时文件或隐藏文件被COPY . /app指令复制到容器,部分文件包含空字节,触发Python导入错误。
  2. 依赖包损坏:容器内安装依赖时,网络不稳定导致包下载不完整,使得requests等库的源码文件出现损坏,包含空字节。
  3. 文件编码不兼容:本地与容器的文件系统编码存在差异,文件复制过程中出现字节转换错误,引入空字节。

解决方法

方法一:排除冗余文件

  1. 在项目根目录创建.dockerignore文件,添加以下内容:
__pycache__/
*.pyc
*.pyo
*.pyd
.env
.vscode/
.git/
.DS_Store
*.swp
*.swo
  1. 重新构建镜像:
docker-compose build

方法二:确保依赖安装完整

修改Dockerfile,升级pip并清理缓存,避免安装损坏的包:

FROM tiangolo/uvicorn-gunicorn:python3.10-slim

COPY . /app
WORKDIR /app

RUN pip install --upgrade pip && \
    pip install -r requirements.txt --no-cache-dir && \
    rm -rf /root/.cache/pip

CMD celery worker -B --app=worker.worker.celery --loglevel=debug

方法三:检查并修复损坏文件

  1. 进入容器:
docker exec -it momo-api-worker-1 /bin/bash
  1. 检查报错涉及的文件是否存在空字节(以requests/packages.py为例):
grep -P '\x00' /usr/local/lib/python3.10/site-packages/requests/packages.py
  1. 若发现空字节,重新安装对应包:
pip install --force-reinstall requests

方法四:精准复制必要文件

避免复制整个目录,仅复制项目必需的源码文件,减少冗余:

FROM tiangolo/uvicorn-gunicorn:python3.10-slim

WORKDIR /app

# 先复制依赖文件,利用Docker缓存
COPY requirements.txt .
RUN pip install --upgrade pip && pip install -r requirements.txt --no-cache-dir

# 复制核心源码目录
COPY worker/ ./worker/
COPY container.py ./
COPY services/ ./services/

CMD celery worker -B --app=worker.worker.celery --loglevel=debug

内容的提问来源于stack exchange,提问作者Dirk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 18:57:07