Ansible执行Docker登录时报错:HTTPConnection.request()含意外参数'chunked'
解决Ansible docker_login任务报错:HTTPConnection.request() got an unexpected keyword argument 'chunked'
问题场景
在Ubuntu 24.04机器上执行以下Ansible任务时触发错误:
- name: Attempt a Docker login to the registry community.docker.docker_login: registry_url: "{{ docker_registry }}" username: "{{ ansible_hostname }}" password: "{{ analytics_secrets[ansible_hostname].gitlab_deploy_token }}" reauthorize: yes
错误信息
fatal: [example.com]: FAILED! => {"changed": false, "msg": "Error connecting: Error while fetching server API version: HTTPConnection.request() got an unexpected keyword argument 'chunked'"}
服务器Docker版本
➜ docker info Client: Docker Engine - Community Version: 28.2.2 Context: default Debug Mode: false Plugins: buildx: Docker Buildx (Docker Inc.) Version: v0.24.0 Path: /usr/libexec/docker/cli-plugins/docker-buildx compose: Docker Compose (Docker Inc.) Version: v2.36.2 Path: /usr/libexec/docker/cli-plugins/docker-compose
解决方案
这个错误是因为Ansible的community.docker集合版本与目标主机上的docker Python库(原docker-py)、urllib3库版本不兼容导致的——高版本docker库引入了chunked参数,但低版本urllib3不支持该参数。
可以通过以下几种方式解决:
升级urllib3库
在目标主机上执行命令升级:pip install --upgrade urllib3匹配community.docker与docker库版本
- 先检查当前Ansible使用的
community.docker集合版本:ansible-galaxy collection list community.docker - 根据集合版本安装对应兼容的
docker库:- 若使用
community.docker 3.x,建议安装docker>=6.0.0 - 若使用
community.docker 2.x,建议安装docker>=5.0.0
- 若使用
- 在目标主机上安装指定版本:
pip install docker==6.1.3
- 先检查当前Ansible使用的
改用原生docker命令替代模块
如果暂时无法调整库版本,可以直接用command模块调用系统的docker login命令:- name: Docker login via native command command: docker login {{ docker_registry }} -u {{ ansible_hostname }} -p {{ analytics_secrets[ansible_hostname].gitlab_deploy_token }} changed_when: false
内容的提问来源于stack exchange,提问作者slhck
相关产品推荐
相关产品推荐

