【问题标题】:Ansible: no package available for docker-ceAnsible:没有可用于 docker-ce 的软件包
【发布时间】:2017-08-20 09:07:41
【问题描述】:

我想在装有 Ubuntu 16.04 的远程机器上安装 Docker,使用 Ansible 并遵循https://docs.docker.com/engine/installation/linux/ubuntu/ 的官方文档。 一切似乎都正常,直到 ansible 到达名为“安装 Docker”的任务,我得到“没有与 'docker-ce' 匹配的包可用”。

剧本的以下部分,从存储库的设置点开始:

- name: set the stable repository
    apt_repository: 
      repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable
      

  - name: Update all packages to the latest version
    apt:
      upgrade: dist

  - name: install Docker
    apt:
      name: docker-ce
      state: present

可能是什么问题?

【问题讨论】:

    标签: docker ansible


    【解决方案1】:

    我知道你正在搜索ubuntu安装,但是对于其他用户(正如我之前搜索过的),我将分享我的centos版本(运行):

    ---
    - name: Install docker
      gather_facts: true
      check_mode: no # yes only for test
      hosts: swarm_cluster
      vars:
        sudoers:
          - ansible
      become: true
      tasks:
    
        #################### ABSENT ########################
    # systemctl status docker
        - name: Stop and disable docker service
          service:
            name: docker
            enabled: no
            state: stopped
          register: docker_service_result
          failed_when: "docker_service_result is failed and 'Could not find the requested service' not in docker_service_result.msg"
    
    # grep /etc/group -e "docker"
        - name: Remove docker group
          group:
            name: docker
            state: absent
            system: yes
    
        - name: Remove 'docker', 'yum-utils', 'lvm2' and 'device-mapper-persistent-data' packages
          package:
            name: '{{ item }}'
            state: absent
          with_items:
            - docker
            - docker-client
            - docker-client-latest
            - docker-common
            - docker-latest
            - docker-latest-logrotate
            - docker-logrotate
            - docker-engine
            - docker-ce
            - docker-ce-cli
            - containerd.io
            - lvm2
            - device-mapper-persistent-data
            - yum-utils
    
    # sudo vi /etc/yum.repos.d/docker-ce.repo
        - name: Remove docker repository
          yum_repository:
            name: docker-ce
            state: absent
    
    #################### PRESENT ########################
        - name: Install 'yum-utils', 'lvm2' and 'device-mapper-persistent-data'
          package:
            name: '{{ item }}'
            state: latest
          with_items:
            - yum-utils
            - device-mapper-persistent-data
            - lvm2
    
        - name: Install docker repository
          yum_repository:
            name: '{{ item.name }}'
            description: '{{ item.desc }}'
            file: docker-ce
            baseurl: '{{ item.baseurl }}'
            enabled: '1'
            gpgcheck: yes
            gpgkey: 'https://download.docker.com/linux/centos/gpg'
            state: present
          with_items:
            - { name: 'docker-ce-stable', desc: 'Docker CE Stable - $basearch', baseurl: 'https://download.docker.com/linux/centos/7/$basearch/stable'}
            - { name: 'docker-ce-edge', desc: 'Docker CE Edge - $basearch', baseurl: 'https://download.docker.com/linux/centos/7/$basearch/edge'}
            - { name: 'docker-ce-test', desc: 'Docker CE Test - $basearch', baseurl: 'https://download.docker.com/linux/centos/7/$basearch/test'}
    
        - name: Install docker
          package:
            name: '{{ item }}'
            state: latest
          with_items:
            - docker-ce
            - docker-ce-cli
            - containerd.io
    
        - name: Start docker service
          service:
            name: docker
            state: started
            enabled: yes
    
        - name: Test Docker with hello world example
          shell: 'docker run hello-world'
          register: hello_world_output
    
        - name: Show output of hello word example
          debug:
            msg: 'Container output: {{ hello_world_output.stdout }}'
    
        - name: Create docker group
          group:
            name: docker
            state: present
            system: yes
    
        - name: Add ansible to docker group
          user:
            name: ansible
            groups: docker
            append: yes
    
        - name: Reboot server
          shell: 'sleep 1 && reboot'
          async: 1
          poll: 0
    
    

    【讨论】:

    • 非常感谢。这是在 CentOS 7 上运行的版本
    【解决方案2】:

    你需要跑

    sudo apt-get install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable" sudo apt-get update sudo apt-get install docker-ce

    【讨论】:

      【解决方案3】:

      问题是 apt 存储库添加不正确。以下行实际上是添加 $(lsb_release -cs) 并且没有插值:

      repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable
      

      你想要的是像这样使用 Ansible 事实:

      repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu {{ ansible_lsb.codename }} stable
      

      这应该会在/etc/apt/sources.list.d/download_docker_com_repo.list 文件中为您提供以下信息:

      deb [arch=amd64] https://download.docker.com/linux/ubuntu trusty stable
      

      注意:您可能还需要apt_key 来导入 GPG 密钥(根据安装说明)。

      【讨论】:

        【解决方案4】:

        或者,如果 Ansible 版本 >= 2.0,您可以使用通用操作系统包管理器模块:

        - name: install docker
          package:
            name: docker-ce
            state: present
        

        【讨论】:

        • 我还是有同样的问题!
        • 回购到位了吗?
        • 输入 find /etc/apt/ -name *.list | xargs cat | grep ^[[:space:]]*deb 我得到:deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable
        • $(lsb_release -cs) 替换为xenial(适用于ubuntu 16.04)从您的/etc/apt/sources.list 并重试
        • 其实错误来自之前的apt_repository,其中$(lsb_release -cs)部分可以替换为{{ ansible_lsb.codename }}(需要提前收集事实)
        【解决方案5】:

        你没有运行 apt-get update,所以新的 repo 没有被读取

        【讨论】:

        • 我试过了 - name: apt-get update apt: update_cache: yes upgrade: safe cache_valid_time: 3600 但同样的问题
        猜你喜欢
        • 1970-01-01
        • 2017-06-26
        • 2019-05-01
        • 1970-01-01
        • 2017-06-25
        • 2014-12-26
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多