Ansible Molecule测试报错:SSH解析与Docker容器临时目录权限问题
解决Molecule+Ansible测试中的SSH解析、容器定位及临时目录权限问题
问题梳理
作为Ansible和Molecule新手,按官方指南执行molecule test时遇到一连串问题:
- SSH无法解析
instance主机名,导致连接失败 - 手动添加
/etc/hosts映射后,角色创建的目录跑到本地笔记本,而非目标Docker容器 - 修正平台配置后,又出现远程临时目录创建权限错误
问题1:SSH无法解析instance主机名
执行命令:
(venv) [red@mac-laptop.local fake_role]$ molecule test
报错片段:
fatal: [instance]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname instance: nodename nor servname provided, or not known", "unreachable": true}
错误的临时处理(引发后续问题):
当时把instance映射到本地回环地址:
(venv) [red@mac-laptop.local fake_role]$ echo "127.0.0.1 instance" >> /etc/hosts
问题2:目录生成在本地而非Docker容器
添加hosts映射后,角色创建的/tmp/fake目录出现在本地,这是因为错误地让Ansible把instance当成了本地主机,直接在本地执行任务,而非连接Molecule创建的Docker容器。
正确修正方案:
修改molecule.yml的platforms配置,明确指定Docker镜像,让Molecule自动创建并管理目标容器:
--- dependency: name: galaxy driver: name: docker platforms: - name: instance image: docker.io/pycontribs/centos:7 pre_build_image: true provisioner: name: ansible verifier: name: ansible
问题3:无法创建远程临时目录
修正配置后,执行molecule test出现新报错:
fatal: [instance]: UNREACHABLE! => {"changed": false, "msg": "Failed to create temporary directory.In some cases, you may have been able to authenticate and did not have permissions on the target directory. Consider changing the remote tmp path in ansible.cfg to a path rooted in \"/tmp\", for more error information use -vvv. Failed command was: ( umask 77 && mkdir -p \"` echo ~/.ansible/tmp `\"&& mkdir \"` echo ~/.ansible/tmp/ansible-tmp- 1668098032.9524324-2225817-158864423468362 `\" && echo ansible-tmp- 1668098032.9524324-2225817-158864423468362=\"` echo ~/.ansible/tmp/ansible-tmp-1668098032.9524324-2225817-158864423468362 `\" ), exited with result 1", "unreachable": true}
原因:Ansible默认的远程临时目录~/.ansible/tmp在CentOS 7容器中,当前用户没有权限创建该目录。
解决步骤:
- 在项目目录创建或修改
ansible.cfg文件 - 添加以下配置,将远程临时路径改为
/tmp下的可写目录:
[defaults] remote_tmp = /tmp/.ansible/tmp
- 重新执行
molecule test即可正常运行
内容的提问来源于stack exchange,提问作者Red Cricket
相关产品推荐
相关产品推荐

