--- - name: Move Docker data-root to /data/docker hosts: google-sdk become: true vars: new_docker_root: /data/docker old_docker_root: /var/lib/docker tasks: - name: Ensure rsync installed package: name: rsync state: present - name: Stop Docker service service: name: docker state: stopped ignore_errors: true - name: Create new data root file: path: "{{ new_docker_root }}" state: directory mode: '0755' - name: Check old docker root exists stat: path: "{{ old_docker_root }}" register: old_docker_root_stat - name: Sync old data to new root (if old exists) command: rsync -aHAX --numeric-ids --delete {{ old_docker_root }}/ {{ new_docker_root }}/ when: old_docker_root_stat.stat.exists args: warn: false - name: Backup old directory command: mv {{ old_docker_root }} {{ old_docker_root }}.bak args: creates: "{{ old_docker_root }}.bak" when: old_docker_root_stat.stat.exists - name: Ensure /etc/docker exists file: path: /etc/docker state: directory mode: '0755' - name: Write daemon.json copy: dest: /etc/docker/daemon.json mode: '0644' content: | { "data-root": "{{ new_docker_root }}", "storage-driver": "overlay2", "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } } - name: Start Docker service: name: docker state: started enabled: true - name: Verify root dir command: docker info --format '{% raw %}{{json .DockerRootDir}}{% endraw %}' register: docker_root changed_when: false - name: Show result debug: msg: "DockerRootDir = {{ docker_root.stdout }}" - name: Fail if not moved fail: msg: "迁移失败,当前仍是旧目录" when: docker_root.stdout.find(new_docker_root) == -1