服务器重启后Molecule无法正常启动Docker容器的问题求助
解决Molecule + Ansible Role重启后的实例状态和权限问题
第一步:清理Molecule残留状态,同步实例真实情况
服务器重启后Docker容器已销毁,但Molecule的本地状态缓存还记录着实例存在,才会出现「Skipping, instances already created」的矛盾提示。你需要彻底清理这些无效状态:
- 先执行Molecule自带的销毁命令,清除残留实例和状态:
molecule destroy - 如果销毁命令未完全清理干净,手动删除角色目录下的Molecule状态文件夹:
rm -rf .molecule/ - 之后重新创建实例:
molecule create
第二步:修复Ansible远程临时目录权限问题
molecule converge时的认证失败,核心原因是Ansible默认使用远程用户的~/.ansible/tmp目录,但测试容器里的用户可能没有家目录、或家目录权限受限。你可以用以下几种方式解决:
方法1:修改全局Ansible配置(ansible.cfg)
在配置文件中添加或修改remote_tmp参数,指定到/tmp下的开放路径:
[defaults] remote_tmp = /tmp/.ansible/tmp
/tmp目录通常权限宽松,不会出现访问限制问题。
方法2:在Molecule playbook中临时指定
不想修改全局配置的话,直接在角色的converge.yml里设置临时变量:
- name: Converge hosts: all vars: ansible_remote_tmp: /tmp/.ansible/tmp roles: - role: your_role_name
方法3:自定义测试镜像时预配置权限
如果用自定义Docker镜像作为测试实例,在镜像构建时提前创建目录并设置权限:
RUN mkdir -p ~/.ansible/tmp && chmod 700 ~/.ansible/tmp
验证效果
完成上述操作后,重新执行命令验证:
molecule create && molecule converge
应该就能正常执行Gathering Facts和后续Role任务了。
内容的提问来源于stack exchange,提问作者zegoat7
相关产品推荐
相关产品推荐

