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

在VirtualBox虚拟机中用Molecule测试安装Docker的Ansible角色

兄弟,我完全懂你这个痛点!在Windows上靠VirtualBox跑Molecule,想通过Docker驱动测试你的Docker安装Ansible角色,结果容器里用systemctl启动Docker daemon死活不成功——这事儿我之前也踩过坑,给你几个亲测有效的办法:

1. 配置特权容器并启用systemd环境

默认的Docker容器没有足够权限运行systemd和Docker daemon,你需要修改molecule/default/molecule.yml的平台配置,给容器加特权模式,同时挂载systemd的cgroup目录并指定启动命令为init:

platforms:
  - name: centos7
    image: centos:7
    privileged: true  # 赋予容器主机级权限,允许启动Docker daemon
    volumes:
      - /sys/fs/cgroup:/sys/fs/cgroup:ro  # 挂载systemd依赖的cgroup文件系统
    command: "/usr/sbin/init"  # 让容器以systemd作为PID 1进程

这样容器启动后会完整运行systemd环境,你的Ansible角色里的systemctl start docker就能正常执行了。

2. 绕过systemctl,直接启动Docker daemon

如果不想折腾systemd的容器配置,也可以在你的Ansible角色里调整启动逻辑,直接调用dockerd命令后台启动:

- name: Install Docker packages
  yum:
    name: docker
    state: present

- name: Start Docker daemon in background
  command: dockerd -H unix:///var/run/docker.sock
  async: 1000  # 异步执行,不阻塞后续任务
  poll: 0       # 立即返回,让进程在后台运行
  become: true

这种方式不需要依赖systemd,适合快速测试,但要注意后续任务如果需要Docker客户端连接,要等daemon完全启动后再执行(可以加个等待/var/run/docker.sock文件生成的任务)。

3. 使用预配置好的Ansible测试镜像

有些社区镜像已经帮你搞定了systemd和Ansible的环境,比如geerlingguy/docker-centos7-ansible,这类镜像专门为Molecule测试打造,直接用它作为基础镜像能省不少事:

platforms:
  - name: centos7
    image: geerlingguy/docker-centos7-ansible
    privileged: true  # 还是需要特权模式才能启动Docker daemon

启动后容器自带可用的systemd环境,你的角色可以直接用systemctl操作Docker服务。

另外还要注意:在VirtualBox里的虚拟机本身要确保Docker服务已经启动,而且运行Molecule的用户要有Docker操作权限(比如加入docker组,或者用sudo运行Molecule命令)。

内容的提问来源于stack exchange,提问作者Nicola Musatti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 03:43:17