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

可否使用预装Ansible的Docker镜像实现对另一Docker容器的配置

方案可行性确认

该方案完全可行,是本地测试Ansible Playbook的主流轻量化方案,效率远高于准备独立物理机/虚拟机的测试方式。
绝大多数教程要求使用独立机器,是因为这类教程多面向生产部署场景教学,生产环境的被管理节点普遍为独立服务器/虚拟机,才会采用该类示例,并不代表容器化测试方案不可用。

具体实现步骤

1. 构建Ansible控制端镜像

创建控制端Dockerfile,内容如下:

# 基于轻量Python镜像构建
FROM python:3.11-slim
# 安装依赖和Ansible
RUN apt update && apt install -y openssh-client && \
    pip install --no-cache-dir ansible && \
    apt clean && rm -rf /var/lib/apt/lists/*
# 设置工作目录
WORKDIR /playbooks

执行构建命令:
docker build -t ansible-controller .

2. 准备被管理端容器

Ansible默认通过SSH连接节点,因此被管理容器需要预装openssh-server服务,创建被管理端Dockerfile示例:

FROM ubuntu:22.04
# 安装SSH服务
RUN apt update && apt install -y openssh-server sudo && \
    # 配置允许root登录,设置测试密码(生产环境请勿使用该配置)
    echo 'root:test123' | chpasswd && \
    sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config && \
    sed -i 's/UsePAM yes/UsePAM no/' /etc/ssh/sshd_config && \
    apt clean && rm -rf /var/lib/apt/lists/*
# 暴露SSH端口
EXPOSE 22
# 启动SSH服务
CMD ["/usr/sbin/sshd", "-D"]

构建并启动被管理容器,首先创建专用Docker网络方便容器间通信:
docker network create ansible-test-net
构建被管理端镜像:
docker build -t ansible-node -f Dockerfile.node .
启动被管理容器:
docker run -d --name ansible-node --network ansible-test-net ansible-node

3. 执行Ansible配置管理

首先在本地创建inventory配置文件inventory.ini,内容如下:

[nodes]
ansible-node ansible_user=root ansible_ssh_pass=test123

将Playbook文件和inventory文件放在本地playbooks目录下,启动控制端容器执行配置命令:
docker run --rm -v $(pwd)/playbooks:/playbooks --network ansible-test-net ansible-controller ansible-playbook -i inventory.ini your_playbook.yml

优化建议
  • 生产环境Playbook测试建议使用SSH密钥代替明文密码配置,将本地SSH公钥内置到被管理端镜像中即可
  • 无需将被管理端SSH端口映射到宿主机,同Docker网络下的容器可直接通过容器名通信,安全性更高
  • 测试完成后可直接删除两个容器和自定义网络,不会在本地残留任何环境垃圾

内容的提问来源于stack exchange,提问作者Mark Gargan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:15:05