docker.from_env() 获取docker守护进程时出现 TypeError: load_config() got an unexpected keyword argument 'config_dict' 异常

某天使用python重启docker容器时,出现了一个令人费解的BUG,我的代码为

复制代码
 1 def restart_docker(container_name):
 2     # 连接到docker守护进程
 3     client = docker.from_env()
 4     try:
 5         # 获取容器对象
 6         container = client.containers.get(container_name)
 7         print("正在重启docker...")
 8         # 重启容器
 9         container.restart()
10         # 等待一段时间让容器重启
11         container.reload()
12         # 此容器8秒没挂就不会挂了,重启大概需要2-3秒,休眠10秒再访问状态,差不多了
13         time.sleep(10)
14         if container.status == "running":
15             print("重启docker成功!")
16             return True
17         else:
18             print("重启docker失败!")
19             return False
20     except:
21         print("重启docker出现错误!")

乍一看没啥问题,并且我在Windows和Linux测试服务器上反复测试了N多遍,在执行这个方法时并没有出现什么问题,当我第一次用于实战时,就出现了让我费解的问题

复制代码
1 Traceback (most recent call last):
2 File "", line 1, in
3 File "/usr/lib/python3.10/site-packages/docker/client.py", line 81, in from_env
4 **kwargs_from_env(**kwargs))
5 File "/usr/lib/python3.10/site-packages/docker/client.py", line 38, in init
6 self.api = APIClient(*args, **kwargs)
7 File "/usr/lib/python3.10/site-packages/docker/api/client.py", line 110, in init
8 config_dict=self._general_configs
9 TypeError: load_config() got an unexpected keyword argument 'config_dict'

我的第一反应就是,我的包可能出现了不兼容的问题,于是我检查了测试环境的python版本和docker版本,python为3.10.12,docker为6.1.3。

我再查看了出现异常的环境,然并卵,并没有什么不一样,完全一样的系统和环境,怎么会出现问题?百思不得其解,然后我在Github上找到了这篇

https://github.com/docker/docker-py/issues/1916

给出的解决方案两种,一种是删除python,重新安装,但是生产环境,我不能删除python,所以只能从跳过这个方案

第二种解决方法是降级docker版本为2.7,我尝试直接安装最新版的,为docker7.0.0,不行,然后当我将docker降级到2.7的时候,执行代码成功!

但是为了保险,测试完了,我还是将docker换回了6.1.3,并改了一下代码

复制代码
 1 import time
 2 
 3 import subprocess
 4 import docker
 5 
 6 
 7 def restart_docker(container_name):
 8     try:
 9         # 连接到docker守护进程
10         client = docker.from_env()
11         # 获取容器对象
12         container = client.containers.get(container_name)
13         print("正在重启docker...")
14         # 重启容器
15         container.restart()
16         # 等待一段时间让容器重启
17         container.reload()
18         # 此容器8秒没挂就不会挂了,重启大概需要2-3秒,休眠10秒再访问状态,差不多了
19         time.sleep(10)
20         if container.status == "running":
21             print("重启docker成功!")
22             return True
23         else:
24             print("重启docker失败!")
25             return False
26     except:
27         try:
28             print("重启docker出现错误!进行手动重启!")
29             subprocess.call(["docker", "restart", container_name], timeout=10)
30             print("已手动重启!请检查docker状态!")
31         except:
32             print("手动重启失败!")

简单粗暴,先用着,目前我还在找原因,所以你们可以自己选择符合实际的解决方案

相关推荐
数据小爬虫@2 小时前
深入解析:使用 Python 爬虫获取苏宁商品详情
开发语言·爬虫·python
健胃消食片片片片2 小时前
Python爬虫技术:高效数据收集与深度挖掘
开发语言·爬虫·python
ℳ₯㎕ddzོꦿ࿐5 小时前
解决Python 在 Flask 开发模式下定时任务启动两次的问题
开发语言·python·flask
CodeClimb5 小时前
【华为OD-E卷 - 第k个排列 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
一水鉴天5 小时前
为AI聊天工具添加一个知识系统 之63 详细设计 之4:AI操作系统 之2 智能合约
开发语言·人工智能·python
Channing Lewis5 小时前
什么是 Flask 的蓝图(Blueprint)
后端·python·flask
B站计算机毕业设计超人5 小时前
计算机毕业设计hadoop+spark股票基金推荐系统 股票基金预测系统 股票基金可视化系统 股票基金数据分析 股票基金大数据 股票基金爬虫
大数据·hadoop·python·spark·课程设计·数据可视化·推荐算法
觅远6 小时前
python+playwright自动化测试(四):元素操作(键盘鼠标事件)、文件上传
python·自动化
ghostwritten7 小时前
Python FastAPI 实战应用指南
开发语言·python·fastapi
CM莫问7 小时前
python实战(十五)——中文手写体数字图像CNN分类
人工智能·python·深度学习·算法·cnn·图像分类·手写体识别