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

Docker获取服务器API版本时抛出'chunked'错误的原因排查

问题分析与解决

错误本质

这个报错不是容器内部的Django连接错误,而是本地Docker客户端与服务端的API交互失败,根源在于依赖库版本不兼容或Docker组件版本不匹配。

核心原因

报错信息HTTPConnection.request() got an unexpected keyword argument 'chunked'说明:

  • 本地安装的docker Python SDK(docker-py)版本过旧,与当前环境中高版本的requests库不兼容——旧版SDK调用requests时传入了chunked参数,但该版本的requests底层HTTPConnection不支持这个参数。
  • 或者Docker客户端与Docker daemon(服务端)的版本差距过大,导致API交互时出现参数不兼容问题。

解决步骤

第一步:修复本地Docker依赖环境

  1. 升级Docker Python SDK到最新兼容版本:
    pip install --upgrade docker
    
  2. 如果升级SDK后仍有问题,固定requests库到兼容版本(比如适配旧SDK的2.27.x版本):
    pip install requests==2.27.1
    
  3. 检查Docker客户端与服务端版本匹配度:
    运行docker version,确保Client和Server的版本差距不超过2个大版本(比如Client是23.x,Server不要低于21.x),差距过大则升级Docker服务端或客户端。

第二步:修正Docker配置文件的问题

虽然当前报错不是由配置文件直接导致,但这些问题会引发后续容器启动故障:

Dockerfile修正:

FROM python:3.7-alpine

ENV PYTHONUNBUFFERED 1

# 无需手动创建app目录,COPY会自动生成
COPY ./new /app
COPY ./requirements.txt /requirements.txt

RUN pip install -r /requirements.txt

WORKDIR /app

RUN adduser -D user 
USER user 

# 使用JSON格式CMD,避免shell解析问题,同时指定0.0.0.0允许外部访问
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
  • 移除了冗余的RUN mkdir app指令
  • 修正了CMD的引号格式(Dockerfile JSON数组需用双引号)
  • 添加了0.0.0.0:8000确保容器内服务可被外部访问

docker-compose.yml修正:

version: "3"

services: 
  app:
    build: 
      context: .
    ports:
      - "8000:8000"
    volumes:
      # 注意:挂载的./src会覆盖容器内的/app目录,若容器内/app已有代码会被替换,需根据实际路径调整
      - "./src:/app"
    # 修正转义符问题,使用正确的命令格式
    command: ["python", "manage.py", "runserver", "0.0.0.0:8000"]
  • 移除了错误的>转义符
  • 使用JSON格式command替代shell形式,避免解析错误
  • 注意:挂载的./src会覆盖容器内的/app目录,若你希望保留容器内安装的依赖,建议挂载到/app/src而非根目录,避免覆盖site-packages。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:58:35