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

docker,from,env,typeerror,load,config,got,an,unexpected,keyword,argument,dict · 浏览次数 : 4

小编点评

**问题分析:** 1. 使用 Python 重启 docker 容器时出现异常 `TypeError: load_config() got an unexpected keyword argument 'config_dict'`。 2. 问题与 docker 版本有关。 3. 使用的 docker 版本是 6.1.3,而 `load_config()` 方法在 6.1.3 版本中不可用。 4. 将 docker 降级到 2.7 版本后,问题消失,说明版本兼容问题可能导致问题。 **解决方案:** 1. **升级 docker 版本**到 6.1.7 或更高版本。 2. **使用 `docker_compose restart` 命令**代替 `docker restart` 命令。 3. **使用 `docker run -d` 参数启动容器,并设置 `config_file` 参数**指定配置文件路径。 4. **使用 `docker run --name` 和 `docker ps` 命令**观察容器状态。 5. **检查 docker daemon 的日志**以获取更多错误信息。 **注意:** * 使用 `docker_compose restart` 命令需要 `docker-compose` 工具。 * `docker run --name` 和 `docker ps` 命令的 `name` 参数必须与 `docker run` 命令中的 `container_name` 相符。

正文

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

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

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

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 con

FAQ docker运行容器时遇到的一个iptables的报错

现象 某个同学执行docker启动容器的时候提示 docker: Error response from daemon: driver failed programming external connectivity on endpoint frosty_montalcini (5f23d1b819

[转帖]SPEC2006移入docker后的运行问题

https://www.cnblogs.com/csxyc/p/7157890.html 实验需要给SPEC2006的benchmark绑定CPUID,于是想到用docker分配CPU资源,写一个简单的DOCKERFILE文件完成配置 1 FROM cmbant/docker-gcc-build 2

Docker常见使用

#DockerFile: FROM openjdk:8 MAINTAINER guotong ADD lpl-1.0-SNAPSHOT.jar lpl-1.0-SNAPSHOT.jar EXPOSE 8090 ENTRYPOINT ["java","-jar","lpl-1.0-SNAPSHOT.j

Docker 基础 - 3

Web 服务器与应用 Nginx 我的Nginx Docker镜像 ## 设置继承自己创建的 sshd 镜像 FROM caseycui/ubuntu-sshd ## 维护者 LABEL maintainer="CaseyCui cuikaidong@foxmail.com" ## 安装 nginx

[转帖]Docker镜像最佳实践

https://www.zhihu.com/people/trumandu-95/posts 5条最佳建议 1.仅安装产线需要依赖与软件 镜像尽可能最小原则 仅复制jar/war 使用自定义JRE(Java Runtime Environment) 2.使用多阶段构建 FROM maven:3.6.

[转帖]Docker:Python环境Docker镜像瘦身

https://www.jianshu.com/p/c0ad13e0be85 关键字:Docker,Python 原始镜像 封装一个Python 3.7的环境并且安装Python依赖包实现一个机器学习算法预测任务,Dockerfile如下 FROM python:3.7 MAINTAINER xxx

Docker镜像精简方法之二 COPY vs ADD 与镜像层

# Docker镜像精简方法之二 COPY vs ADD 与镜像层 ## 摘要 ``` 昨天只是讲了一下大体的思路. 但是没有实操. 今天想着修改一下默认的打包镜像的命令,验证一下效果 ``` ## 原始命令 ``` FROM adoptopenjdk:8u222-b10-jdk-hotspot-b

docker制作springboot镜像

以下步骤在具有Docker环境的Linux机器上操作。 把springboot-1.0.0.jar放到/usr/local/springboot目录下,并在该目录下创建Dockerfile文件,内容为: FROM openjdk:8-jdk-alpine ADD springboot-1.0.0.j

[转帖]Nginx的Docker容器化配置

https://www.cnblogs.com/lizexiong/p/15032552.html 这里只是做一个简单的演示,基础镜像选用 CentOS 7,Nginx 选用 Nginx 的扩展版本 OpenResty 1.15.8.2。 Nginx 镜像 Dockerfile 脚本如下: FROM