ansible-04 ubuntu安装docker

123 阅读1分钟

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时提示密码

配置步骤

  1. 编辑 /etc/sudoers 文件
    使用 visudo 命令安全编辑配置文件(避免语法错误导致系统问题)

    sudo visudo
    

    在文件中找到类似以下行:

    %sudo ALL=(ALL:ALL) ALL
    

    添加免密规则(以下任选一种):

    • 针对单个用户

      bash
      username ALL=(ALL) NOPASSWD: ALL
      
    • 针对用户组​(如 sudo 组):

      bash
      %sudo ALL=(ALL) NOPASSWD: ALL
      

    将 username 替换为实际用户名,保存并退出。

  2. 通过 /etc/sudoers.d/ 创建独立配置文件​(推荐)

    bash
    sudo visudo -f /etc/sudoers.d/nopasswd
    

    在新文件中写入免密规则(同上),保存退出。

  3. 验证语法并测试

    • 语法验证:visudo 会自动检查语法,无需额外操作。

    • 测试免密是否生效:

      bash
      sudo -n true  # 应无密码提示