Docker获取服务器API版本时抛出'chunked'错误的原因排查
问题分析与解决
错误本质
这个报错不是容器内部的Django连接错误,而是本地Docker客户端与服务端的API交互失败,根源在于依赖库版本不兼容或Docker组件版本不匹配。
核心原因
报错信息HTTPConnection.request() got an unexpected keyword argument 'chunked'说明:
- 本地安装的
dockerPython SDK(docker-py)版本过旧,与当前环境中高版本的requests库不兼容——旧版SDK调用requests时传入了chunked参数,但该版本的requests底层HTTPConnection不支持这个参数。 - 或者Docker客户端与Docker daemon(服务端)的版本差距过大,导致API交互时出现参数不兼容问题。
解决步骤
第一步:修复本地Docker依赖环境
- 升级Docker Python SDK到最新兼容版本:
pip install --upgrade docker - 如果升级SDK后仍有问题,固定
requests库到兼容版本(比如适配旧SDK的2.27.x版本):pip install requests==2.27.1 - 检查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
相关产品推荐
相关产品推荐

