在 WSL Ubuntu 上使用 Docker 搭建可被 Ansible 控制的受控节点环境
在学习 Ansible 自动化运维时,通常需要一台控制节点和一台或多台受控节点。为了快速搭建实验环境,可以在 Windows 10 上通过 WSL Ubuntu + Docker 来模拟受控节点。
一、安装 Docker
1️⃣ WSL 环境准备
-
操作系统要求:Windows 10 64-bit: Pro, Enterprise, or Education
-
前置条件:
- 启用 WSL2(已安装 Ubuntu 子系统)
- BIOS 中启用虚拟化(VT-x / AMD-V)
2️⃣ 下载 Docker Desktop
- 打开官网:Docker Desktop
- 点击 Download for Windows (Windows 10/11)
- 保存安装包
Docker Desktop Installer.exe
3️⃣ 安装 Docker Desktop
-
双击安装包开始安装
-
勾选选项:
Use WSL 2 instead of Hyper-V
(推荐)Add shortcut to desktop
可选
-
点击 Install
-
安装完成后勾选 Start Docker Desktop when you log in
-
点击 Finish
如果安装过程中提示启用 WSL2 或虚拟机平台,Docker 安装程序会引导你启用。
4️⃣ 启动 Docker Desktop
- 在开始菜单启动 Docker Desktop
- 系统托盘显示 Docker 图标,等待初始化完成
- 进入 Settings → Resources → WSL Integration,确保勾选启用 Ubuntu 子系统
5️⃣ 验证 Docker 安装
在 Ubuntu WSL 中执行:
docker --version
docker run hello-world
如果看到 “Hello from Docker!” 信息,说明 Docker 安装成功,并且 WSL Ubuntu 已能使用 Docker。
二、在 Docker 容器中创建受控节点
为了模拟多台受控节点,可以在 Docker 容器里启动 Linux 系统并运行 SSH 服务。
1️⃣ 拉取 Linux 镜像
docker pull ubuntu:20.04
# 或者
docker pull centos:7
2️⃣ 启动容器并映射 SSH
docker run -d --name node1 --hostname node1 --privileged -p 2222:22 ubuntu:20.04 sleep infinity
参数说明:
-d
→ 后台运行--name node1
→ 容器名--hostname node1
→ 容器主机名--privileged
→ 给容器额外权限,方便调试-p 2222:22
→ 将宿主机 2222 端口映射到容器 22 端口sleep infinity
→ 容器持续运行,不会退出
3️⃣ 安装 SSH 和 Python
进入容器:
docker exec -it node1 bash
安装依赖:
apt update
apt install -y openssh-server python3 sudo
mkdir -p /var/run/sshd
service ssh start
Python 是 Ansible 模块执行依赖。
4️⃣ 设置 root 密码
passwd root
# 输入密码,例如 root123
检查 SSH 配置文件 /etc/ssh/sshd_config
,确保:
PermitRootLogin yes
PasswordAuthentication yes
然后重启 SSH 服务:
service ssh restart
5️⃣ 配置 Ansible inventory
在控制节点项目目录下创建 inventory.ini
:
[mydocker]
node1 ansible_host=127.0.0.1 ansible_port=2222 ansible_user=root ansible_password=root123
6️⃣ 测试 Ansible 连接
ansible -i inventory.ini mydocker -m ping
成功输出示例:
node1 | SUCCESS => {"changed": false,"ping": "pong"
}
说明控制节点已经可以通过 SSH 管理 Docker 容器中的受控节点。
7️⃣ 退出 Docker 容器而不停止它
如果你通过 docker exec -it node1 bash
进入容器:
- 快捷键退出:
Ctrl + P
然后Ctrl + Q
- 返回宿主机 shell,容器仍在后台运行
可以用以下命令查看容器状态:
docker ps
三、常见问题与解决方案
-
主机名无法解析
容器名字不能直接用于宿主机 SSH,建议用127.0.0.1 + 映射端口
登录。 -
SSH 服务未安装/未运行
Ubuntu 容器默认没有 SSH,需要手动安装并启动。 -
缺少命令工具
ss
、netstat
可能不存在,需要安装iproute2
等工具来检查端口。 -
密码忘记或认证失败
可以直接docker exec
进入容器,重置 root 密码。 -
SSH 配置注意事项
必须允许 root 登录和密码认证,否则 Ansible 无法通过 SSH 登录。 -
端口映射
容器端口 22 映射到宿主机端口(如 2222),Ansible inventory 里要正确配置ansible_port
。