盐:'dockerng' __virtual__ 返回 False

Salt: 'dockerng' __virtual__ returned False

我有 Debian Jessie,我正在尝试使用 Salt dockerng 管理 Docker 个容器。但是当我尝试这个状态时:

# file: docker_demo.sls

hello-world:
  dockerng.image_present

然后 sudo salt '*' state.highstate 失败:

----------
          ID: hello-world
    Function: dockerng.image_present
      Result: False
     Comment: State 'dockerng.image_present' was not found in SLS 'docker_demo'
              Reason: 'dockerng' __virtual__ returned False
     Started: 
    Duration: 
     Changes:   

我该如何解决这个问题,以便 dockerng.image_present 可以拉取图像,dockerng.running 可以 运行 Docker 容器等?

Salt minion 执行的 dockerng 模块使用 docker-py(不是 CLI 命令 docker)通过 REST API 与 Docker 守护程序通信。

错误信息'dockerng' __virtual__ returned False有点误导,但是如果你看到源代码,它returns False因为它不能导入Pyhon模块docker。所以必须安装这个Python包。

Debian 存储库中有软件包:python-dockerpython3-docker。但是两者都与最近的 docker-engine(从 APT 存储库 deb https://apt.dockerproject.org/repo debian-jessie 安装)不兼容。

因此解决方案是卸载 python-docker 软件包(如果已安装)并使用 pip:

安装最新的 docker-py
sudo apt-get install python-pip
sudo pip install docker-py

或者使用这个 Salt 状态:

python-pip:
  pkg.installed

docker-py:
  pip.installed:
    - require:
      - pkg: python-pip

或者只是 运行

salt myminion pip.install docker-py

来自 Debian Stretchpython-docker 软件包(正在测试,应该在 2017 年成为 Debian 稳定版)似乎工作正常。