--- - name: Check if Docker is already installed ansible.builtin.command: docker --version register: docker_check changed_when: false failed_when: false - name: Install Docker (Debian/Ubuntu) when: - ansible_facts['os_family'] == 'Debian' - docker_check.rc != 0 block: - name: Remove old Docker apt repository files ansible.builtin.file: path: "{{ item }}" state: absent loop: - /etc/apt/sources.list.d/docker.list - /etc/apt/keyrings/docker.gpg - name: Install prerequisite packages ansible.builtin.apt: name: - apt-transport-https - ca-certificates - curl - gnupg state: present update_cache: true cache_valid_time: 0 - name: Add Docker GPG key ansible.builtin.get_url: url: https://download.docker.com/linux/{{ ansible_facts['distribution'] | lower }}/gpg dest: "{{ docker_gpg_key_path }}" mode: "0644" - name: Add Docker repository ansible.builtin.deb822_repository: name: docker types: deb uris: https://download.docker.com/linux/{{ ansible_facts['distribution'] | lower }} suites: "{{ ansible_facts['distribution_release'] }}" components: stable signed_by: "{{ docker_gpg_key_path }}" state: present - name: Install Docker packages ansible.builtin.apt: name: - docker-ce - docker-ce-cli - containerd.io - docker-compose-plugin state: present update_cache: true cache_valid_time: 0 - name: Install Docker (Arch Linux) when: - ansible_facts['os_family'] == 'Archlinux' - docker_check.rc != 0 block: - name: Install Docker packages community.general.pacman: name: - docker - docker-compose state: present update_cache: true - name: Ensure Docker service is running (systemd) ansible.builtin.systemd: name: docker state: started enabled: true when: systemd_available.stat.exists - name: Start Docker daemon manually (no systemd) ansible.builtin.shell: nohup dockerd > /var/log/dockerd.log 2>&1 & when: - not systemd_available.stat.exists - docker_check.rc != 0 changed_when: true - name: Wait for Docker daemon to be ready ansible.builtin.command: docker version register: docker_ready until: docker_ready.rc == 0 retries: 10 delay: 2 changed_when: false when: not systemd_available.stat.exists - name: Add user to docker group ansible.builtin.user: name: "{{ ansible_user | default(ansible_facts['user_id']) }}" groups: docker append: true when: ansible_user is defined or ansible_facts['user_id'] is defined