首页 > 系统相关 >docker.from_env() 获取docker守护进程时出现 TypeError: load_config() got an unexpected keyword argument '

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

时间:2024-04-25 21:37:22浏览次数:12  
标签:load 10 container 重启 print docker config

某天使用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("手动重启失败!")

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

标签:load,10,container,重启,print,docker,config
From: https://www.cnblogs.com/xieguangsen1029/p/18158634

相关文章

  • 文件上传upload-labs
    文件上传upload-labs相关函数move_upload_file(file,newloc)、file:要移动的文件newloc:规定文件的位置将上传的文件移动到新位置通过HTTPPOST上传文件如果目标文件已存在,则会被覆盖unlike(file)删除文件in_array(search,array)search:规定在数组中搜索的值array......
  • windows xshell登录docker
    xshell远程连接dokcerhttps://blog.csdn.net/RamaYu/article/details/123065667ubuntu重启sshdservicesshrestartdockerrun-itd--nameubuntu--privilegedf9a80a55f492dockercommit-a"ubuntu"-m"ubuntu"724cfcd55f8dubuntu:18.04docker......
  • Docker镜像使用(一)
    1.1镜像获取从Docker镜像仓库获取镜像的命令是dockerpull。其命令格式为:dockerpull[选项][DockerRegistry地址[:端口号]/]仓库名[:标签]拉去镜像之后我们可以使用dockerimagels查看镜像运行我们拉去的镜像:dockerrun-it--rmhello-worlddockerrun就是运......
  • Docker基础——50台容器异常占用宿主机90%内存问题
    一、问题描述一台裸金属服务存有50台业务容器,通过Docker进程起服务,由system-runtime守护容器的生命周期。free-h查看裸金属服务器内存没有正常释放,cat/proc/meminfo查看内存分配无异常,怀疑裸金属服务器的Java进程存在Glibc内存泄漏,或Docker容器没有正常关闭进程释放内存有关;......
  • centos8.2报错Failed to download metadata for repo 'BaseOS': Cannot prepare inter
    报错CentOS-8-Base68B/s|38B00:00错误:Failedtodownloadmetadataforrepo'BaseOS':......
  • 自动释放Docker占用空间
    清理未使用的镜像:使用以下命令可以清理所有未使用的镜像(该命令会删除所有未使用的镜像。如果你只想删除特定的镜像,可以使用镜像的ID或名称作为参数。)dockerimageprune清理临时文件:使用以下命令可以清理Docker生成的临时文件(该命令会删除所有未使用的容器、镜像和临时......
  • docker和虚拟机的区别
    VPS、ECSVPS:虚拟专用服务器,可以理解为物理机上多个Vmware/VirtualBox虚拟机,但传统VPS不支持资源升降级,资源是固定的。ECS:VPS+自主升降级就变成了ECS。docker这里我以一个实际中可能遇到的例子讲解,比如我们有两台服务器,我需要在两台服务器上分别安装vim软件,那么步骤......
  • `loader` 对象是什么
    在Python中,`loader`是一个对象,它的职责是加载模块的代码。当你使用`import`语句导入一个模块时,Python会使用一个特定的`loader`来查找、读取和初始化模块的代码。`loader`遵循一个特定的协议,定义了如何加载模块。`SourceFileLoader`是Python标准库`importlib`模块提......
  • docker的基本命令
    基础命令https://yeasy.gitbook.io/docker_practice/data_management/volume//容器命令1.dockercommand--help查看对应命令的用法2.dockerps-a查看所有docker进程(无论是否在运行)-l最后一次创建的容器3.dockerlogscontainerId查看容器日志4.dockerstar......
  • 使用 Docker 自建一款怀旧游戏之 - 超级马里奥
    1)超级马里奥简介《超级马里奥》(SuperMario)是任天堂公司创造的一款经典游戏系列,是世界上最知名、最成功的游戏之一。这个系列由日本设计师宫本茂于1985年创造,最初的游戏名为《超级马里奥兄弟》(SuperMarioBros.),推出后风靡全球。2)在线部署2.1)安装Docker环境#高版本......