Molecule测试失败:Ansible返回TypeError: TLSConfig.__init__()意外参数'assert_hostname'
问题分析与解决方案
根因
这个错误是docker SDK for Python(docker包)版本自动升级到2.x系列导致的:
- docker SDK 2.x版本移除了
TLSConfig.__init__中的assert_hostname参数 - 当前使用的
community.docker集合版本(依赖要求>=1.9.1),旧版本的community.docker(<3.0.0)仍在调用这个已被移除的参数,从而触发兼容性错误
可行解决方案
方案1:锁定docker SDK到兼容旧版本
在流水线执行Molecule测试前,先安装指定版本的docker包,确保和现有community.docker版本兼容:
pip install docker==1.10.6
(注:1.10.6是经过验证的兼容版本,也可以选择其他1.x系列的稳定版本)
方案2:升级community.docker集合到兼容版本
升级community.docker到3.0.0及以上版本,这些版本已适配docker SDK 2.x的参数变更:
ansible-galaxy collection install community.docker:>=3.0.0 --force
同时注意:你的Ansible core版本是2.12.10,community.docker 3.x系列和该版本兼容,无需额外调整Ansible核心。
方案3:锁定Molecule及相关依赖版本
在流水线的依赖安装阶段,明确指定所有相关工具的版本,避免自动升级:
pip install molecule==3.5.2 molecule-docker==1.1.0 docker==1.10.6 ansible-galaxy collection install community.docker==2.10.0
(版本号可根据实际兼容情况调整,确保整套依赖版本匹配)
额外建议
- 流水线中禁用依赖的自动升级,所有依赖都指定明确版本,避免类似兼容性问题再次发生
- 定期同步依赖版本更新,提前验证兼容性后再升级,不要依赖后台自动升级
内容的提问来源于stack exchange,提问作者Rob Wilkinson
相关产品推荐
相关产品推荐

