IoT Edge动手实验:iotedgectl

时间:2018-01-25 22:30:05

标签: azure-iot-edge

我正在使用Azure IoT Edge Hands-on Lab并遇到iotedgectl命令的问题,我们似乎无法破解。

当我运行'iotedgectl status'(或'start'或'stop')时,我收到以下错误消息:

  

文件“c:\ python27 \ lib \ runpy.py”,第174行,在_run_module_as_main中      “ main ”,fname,loader,pkg_name)    文件“c:\ python27 \ lib \ runpy.py”,第72行,在_run_code中      run_globals中的exec代码    文件“C:\ Python27 \ Scripts \ iotedgectl.exe__main __。py”,第9行,in    文件“c:\ python27 \ lib \ site-packages \ edgectl__init __。py”,第25行,在> coremain中      return cli.execute_user_command()    在> execute_user_command中输入文件“c:\ python27 \ lib \ site-packages \ edgectl \ edgecli.py”,第54行      (is_valid,execute_deployment_cmd)= self._process_cli_args()    在> _process_cli_args中输入文件“c:\ python27 \ lib \ site-packages \ edgectl \ edgecli.py”,第358行      return args.func(args)    在> _parse_edge_command中输入文件“c:\ python27 \ lib \ site-packages \ edgectl \ edgecli.py”,第379行      如果EdgeDefault.is_deployment_supported(self._deployment):    文件“c:\ python27 \ lib \ site-packages \ edgectl \ default.py”,第99行,> is_deployment_supported      client = EdgeDockerClient()    文件“c:\ python27 \ lib \ site-packages \ edgectl \ dockerclient.py”,第13行,> init      self._client = docker.DockerClient.from_env()    文件“c:\ python27 \ lib \ site-packages \ docker \ client.py”,第81行,来自from_env      ** kwargs_from_env(** kwargs))    在 init 中输入文件“c:\ python27 \ lib \ site-packages \ docker \ client.py”,第38行      self.api = APIClient(* args,** kwargs)    文件“c:\ python27 \ lib \ site-packages \ docker \ api \ client.py”,第131行,> init      '安装pypiwin32软件包以启用npipe:// support'   docker.errors.DockerException:安装pypiwin32软件包以启用npipe://>支持

我正在运行Docker for Windows 17.12.0版(最近的稳定构建版),并运行Linux容器。

这是我的配置文件:

  

{    “部署”:{      “docker”:{        “edgeRuntimeImage”:“microsoft / azureiotedge-agent:1.0-preview”,        “loggingOptions”:{          “log-driver”:“json-file”,          “log-opts”:{            “max-size”:“10m”          }        },        “注册管理机构”:[],        “uri”:“unix:///var/run/docker.sock”      },      “type”:“docker”    },    “deviceConnectionString”:“”,    “homeDir”:“C:\ ProgramData \ azure-iot-edge \ data”,    “hostName”:“mygateway.local”,    “logLevel”:“info”,    “schemaVersion”:“1”,    “安全”:{      “证书”:{        “选项”:“预先安装”,        “preInstalled”:{          “agentCAPassphraseFilePath”:“”,          “deviceCACertificateFilePath”:“c:\ edge \ myGateway-public.pem”,          “deviceCAChainCertificateFilePath”:“c:\ edge \ myGateway-all.pem”,          “deviceCAPassphraseFilePath”:“”,          “deviceCAPrivateKeyFilePath”:“c:\ edge \ myGateway-private.pem”,          “forceNoPasswords”:false,          “ownerCACertificateFilePath”:“c:\ edge \ RootCA.pem”        },        “学科”: {          “commonName”:“边缘设备CA”,          “countryCode”:“US”,          “地方”:“雷德蒙德”,          “组织”:“默认边缘组织”,          “organizationUnit”:“边缘单位”,          “州”:“华盛顿”        }      }    }   }

1 个答案:

答案 0 :(得分:3)

编辑原始答案:

问题解决方案:

  • 此处报告的“npipe:// broken”问题适用于Windows计算机,无论是在Docker中使用Linux还是Windows容器都存在问题。
  • azure-iot-edge-runtime-ctl 1.0.0rc19最近发布(2018年1月26日),通过确保安装了正确的pypiwin32软件包解决了这个问题。
  • 要获取最新的位执行:

    $> pip install -U azure-iot-edge-runtime-ctl
    
  • 检查已安装的版本:

    $> iotedgectl --version
    iotedgectl 1.0.0rc19
    

问题摘要:

  • iotedgectl使用library docker-py与Docker进行通信,以启动和控制Edge运行时。
  • docker-py使用pypiwin32通过命名管道(npipe)与docker进行通信。随着pypiwin32 v222的发布,docker-py在Windows主机上被破坏。
  • 作为一个快速的解决方法,直到可以合并官方修复,iotedgectl发布,确保正确工作的依赖关系被拉入。

原始答案

要在Windows上运行,即使您使用基于Linux的容器,也需要pypiwin32,因为docker客户端希望它存在于Windows主机上。

今天发布的pypiwin32版本222(01/25/2018)似乎正在导致您报告的问题。见https://pypi.python.org/pypi/pypiwin32

在我的Windows 10主机上,pypiwin32版本219似乎工作正常。我建议在下面安装版本并重试。

对于Python 2.7.14

  • pip install pypiwin32 == 219

对于Python 3.6.4

  • pip install pypiwin32 == 220