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

Windows10下Docker Python包4.3.1与Docker Desktop4.12.0兼容故障求助

解决Docker Desktop 4.12.0下container.exec_run()报错问题

问题描述

升级Docker Desktop到4.12.0版本后,调用container.exec_run()方法时触发pywintypes.error: (109, 'ReadFile', '管道已终止。')错误,完整堆栈信息如下:

out = self.container.exec_run(command, user=user, demux=demux, environment=environment, workdir=workdir)
文件 "C:\test-proj\build_en\lib\site-packages\docker\models\containers.py",第198行,在exec_run中
exec_output = self.client.api.exec_start(
文件 "C:\test-proj\build_en\lib\site-packages\docker\utils\decorators.py",第19行,在wrapped中
return f(self, resource_id, *args, **kwargs)
文件 "C:\test-proj\build_en\lib\site-packages\docker\api\exec_api.py",第169行,在exec_start中
return self._read_from_socket(res, stream, tty=tty, demux=demux)
文件 "C:\test-proj\build_en\lib\site-packages\docker\api\client.py",第413行,在_read_from_socket中
return consume_socket_output(gen, demux=demux)
文件 "C:\test-proj\build_en\lib\site-packages\docker\utils\socket.py",第137行,在consume_socket_output中
return six.binary_type().join(frames)
文件 "C:\test-proj\build_en\lib\site-packages\docker\api\client.py",第407行
gen = (data for (_, data) in gen)
文件 "C:\test-proj\build_en\lib\site-packages\docker\utils\socket.py",第94行,在frames_iter_no_tty中
(stream, n) = next_frame_header(socket)
文件 "C:\test-proj\build_en\lib\site-packages\docker\utils\socket.py",第66行,在next_frame_header中
data = read_exactly(socket, 8)
文件 "C:\test-proj\build_en\lib\site-packages\docker\utils\socket.py",第51行,在read_exactly中
next_data = read(socket, n - len(data))
文件 "C:\test-proj\build_en\lib\site-packages\docker\utils\socket.py",第35行,在read中
return socket.recv(n)
文件 "C:\test-proj\build_en\lib\site-packages\docker\transport\npipesocket.py",第23行,在wrapped中
return f(self, *args, **kwargs)
文件 "C:\test-proj\build_en\lib\site-packages\docker\transport\npipesocket.py",第117行,在recv中
err, data = win32file.ReadFile(self._handle, bufsize)
pywintypes.error: (109, 'ReadFile', '管道已终止。')

可行解决方法

  • 降级Docker Desktop版本:回退到4.11.x或更早的稳定版本,该版本的管道通信逻辑未出现此兼容性问题。
  • 更新docker-py库:将docker Python库升级到最新版本(至少2.0.0以上),新版本修复了与Docker Desktop 4.12.0的NPipe通信适配问题。执行命令:pip install --upgrade docker
  • 调整exec_run调用参数:尝试移除demux=True参数,改用默认的合并输出模式;或者显式指定stream=False,避免流式读取时的管道中断问题。
  • 重启Docker Desktop:完全关闭Docker Desktop后重新启动,清理残留的管道连接,可能解决临时的通信异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:42:23