1、剧本
在03章节介绍过细节,这里与centos差不多,只是包管理不同
---
- name: 安装 Docker
hosts: hw_docker_servers
become: true
tasks:
- name: 更新 apt 缓存
apt:
update_cache: yes
- name: 安装必要的依赖
apt:
name: "{{ item }}"
state: present
loop:
- apt-transport-https
- ca-certificates
- curl
- software-properties-common
- name: 添加 Docker 官方 GPG 密钥
apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
state: present
- name: 添加 Docker APT 源
apt_repository:
repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable
state: present
- name: 安装 Docker
apt:
name: docker-ce
state: present
- name: 启动 Docker 服务并设置为开机自启动
service:
name: docker
state: started
enabled: yes
2、遇到的问题
执行ansible-play时提示:
{"msg": "Missing sudo password"}
问题原因:
Sudo权限未配置免密
若需通过Ansible执行需要sudo权限的命令,需在目标主机的/etc/sudoers
文件中添加NOPASSWD
规则。例如:
your_user ALL=(ALL) NOPASSWD: ALL
此配置可避免执行sudo时提示密码
配置步骤
-
编辑
/etc/sudoers
文件
使用visudo
命令安全编辑配置文件(避免语法错误导致系统问题)sudo visudo
在文件中找到类似以下行:
%sudo ALL=(ALL:ALL) ALL
添加免密规则(以下任选一种):
-
针对单个用户:
bash username ALL=(ALL) NOPASSWD: ALL
-
针对用户组(如
sudo
组):bash %sudo ALL=(ALL) NOPASSWD: ALL
将
username
替换为实际用户名,保存并退出。 -
-
通过
/etc/sudoers.d/
创建独立配置文件(推荐)bash sudo visudo -f /etc/sudoers.d/nopasswd
在新文件中写入免密规则(同上),保存退出。
-
验证语法并测试
-
语法验证:
visudo
会自动检查语法,无需额外操作。 -
测试免密是否生效:
bash sudo -n true # 应无密码提示
-