You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible Molecule测试报错:SSH解析与Docker容器临时目录权限问题

解决Molecule+Ansible测试中的SSH解析、容器定位及临时目录权限问题

问题梳理

作为Ansible和Molecule新手,按官方指南执行molecule test时遇到一连串问题:

  1. SSH无法解析instance主机名,导致连接失败
  2. 手动添加/etc/hosts映射后,角色创建的目录跑到本地笔记本,而非目标Docker容器
  3. 修正平台配置后,又出现远程临时目录创建权限错误

问题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容器中,当前用户没有权限创建该目录。

解决步骤:

  1. 在项目目录创建或修改ansible.cfg文件
  2. 添加以下配置,将远程临时路径改为/tmp下的可写目录:
[defaults]
remote_tmp = /tmp/.ansible/tmp
  1. 重新执行molecule test即可正常运行

内容的提问来源于stack exchange,提问作者Red Cricket

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 02:50:32