Apple Silicon芯片MacOS系统下Ansible连接Docker引擎创建动态库存失败问题排查
看起来你遇到的核心问题是Docker动态库存插件无法被识别,以及对库存插件和执行模块的概念混淆,再加上brew安装Ansible带来的路径特殊性。我来一步步帮你解决:
1. 先修正Docker Socket路径(最可能的直接原因)
M1 Mac上Docker Desktop默认的socket路径是/var/run/docker.sock(这是一个指向Docker实际socket的符号链接),你配置的unix://Users/ME/.docker/run/docker-cli-api.sock大概率不是正确的路径。
先验证路径是否存在:
ls -la /Users/ME/.docker/run/docker-cli-api.sock
如果返回"No such file or directory",立刻修改你的库存配置文件:
plugin: community.docker.docker_containers docker_host: "unix:///var/run/docker.sock"
2. 确保community.docker Collection安装正确(brew环境特殊性)
brew安装的Ansible会使用独立的Python虚拟环境,所以你必须用brew对应的ansible-galaxy命令安装Collection,不能混用系统Python或其他虚拟环境的命令:
- 先确认brew安装的Ansible路径(避免版本混乱):
brew info ansible
输出里会显示类似/opt/homebrew/Cellar/ansible/[版本号]/libexec的路径,这是它的独立环境。
- 安装
community.dockerCollection:
ansible-galaxy collection install community.docker
- 验证安装结果:
ansible-galaxy collection list community.docker
正常会显示安装的版本和路径(通常在~/.ansible/collections/ansible_collections/community/docker)。
3. 让Ansible能找到库存插件
brew安装的Ansible有时不会自动加载第三方Collection的插件,你需要手动配置插件路径:
在你的项目根目录创建/修改ansible.cfg文件:
[defaults] # 把下面的路径替换成你实际的Collection插件路径和Ansible默认插件路径 inventory_plugins = ~/.ansible/collections/ansible_collections/community/docker/plugins/inventory:/opt/homebrew/Cellar/ansible/[你的版本号]/libexec/lib/python3.11/site-packages/ansible/plugins/inventory
配置完成后再测试库存命令:
ansible-inventory --graph -i ./hosts/hosts-docker-local.yaml
4. 纠正一个概念错误
你执行的ansible localhost -i ./hosts/hosts-docker-local.yaml -m community.docker.docker_containers是错误的用法:community.docker.docker_containers是库存插件(用来生成动态主机清单),不是可以直接执行的模块。你只能用ansible-inventory命令调用它,或者在playbook中指定这个库存文件来使用生成的主机列表。
最后验证
如果以上步骤都完成,重新运行库存命令应该能正常识别到你的Docker容器主机了。如果还有问题,可以检查Docker Desktop是否正在运行,以及当前用户是否有访问/var/run/docker.sock的权限(可以用docker ps测试,不需要sudo的话权限就没问题)。
内容的提问来源于stack exchange,提问作者thiebaut fischer

