【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释

简介: 【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释

Azure Container Instance服务介绍

Azure 容器实例(Azure Container Instances,简称 ACI)是一个无服务器容器解决方案,允许用户在 Azure 云环境中运行 Docker 容器,而无需设置虚拟机、集群或编排器。

ACI 适用于任何可以在隔离容器中操作的场景,包括事件驱动的应用程序、从容器开发管道快速部署、数据处理和生成作业。

 

Execute 命令的目的是在运行中的容器实例中执行命令。

这在应用程序开发和故障排除期间特别有用,最常见的用途是启动交互式 shell,以便在运行中的容器中调试问题

问题描述

使用命令行 az container exec 之后,会进入这个容器里,并且有一个窗口进行交互。

命令如下:

az container exec --resource-group <container_instance_rg> --name <testcontainer-instance> --container-name <testcontainer-instance> --exec-command "/bin/bash"

结果如下:

但是,如果调用Python SDK 以及REST API去调用 Execute 执行命令,返回的内容确实一个 webSocketUri 加 password 的JSON对象。

难道这个同一个命令,两种执行方式的差异吗?为什么表现得结果如此不同呢?

 

问题解答

经过调查和研究 Containers - Execute Command - REST API (Azure Container Instances) | Microsoft Learn 这个文档,  az container exec 和 Python SDK一样,都是调用得REST API 执行指令. 只是执行az命令得 CMD 窗口自动解析了命令返回得 webSockerUri 和 Password。所以显示出一个交互式页面。

 

但是,如果使用REST API或者Python SDK,需要把请求返回得Web Socket JSON对象,通过websocket 方式与目标Container进行通信, 在浏览器的Console中执行如下JavaScript脚本:

wsUri = '<webSocketUri>';
wsPass = '<password>';
var aWebSocket = new WebSocket(wsUri);
aWebSocket.send(wsPass);

执行后的结果中,就看可以看见 root@xxxx : 内容。与 命令窗口结果一样!

 

所以,最终结论为:Python SDK 和 az container exec  结果完全一样,只是执行方式不一样,Python SDK返回的结果需要使用websocket的方式进行交互!

 

参考资料

 

Containers - Execute Command : https://learn.microsoft.com/en-us/rest/api/container-instances/containers/execute-command?view=rest-container-instances-2023-05-01&tabs=Python#containerexec

Web Socket Authentication :https://websockets.readthedocs.io/en/stable/topics/authentication.html

相关文章
|
20天前
|
NoSQL Unix 网络安全
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
|
16天前
|
数据采集 开发工具 Python
海康威视工业相机SDK+Python+PyQt开发数据采集系统(支持软件触发、编码器触发)
该系统基于海康威视工业相机SDK,使用Python与PyQt开发,支持Gige与USB相机设备的搜索及双相机同时显示。系统提供软件触发与编码器触发模式,并可在数据采集过程中实时保存图像。此外,用户可以调节曝光时间和增益,并进行信息输入,这些信息将被保存至配置文件以便下次自动加载。参数调节与实时预览等功能进一步增强了系统的实用性。
40 1
|
20天前
|
网络安全 开发工具 Python
【Azure事件中心】使用Python SDK(Confluent)相关方法获取offset或lag时提示SSL相关错误
【Azure事件中心】使用Python SDK(Confluent)相关方法获取offset或lag时提示SSL相关错误
|
16天前
|
数据可视化 Python
通过python建立一个web服务查看服务器上的文本、图片、视频等文件
通过python建立一个web服务查看服务器上的文本、图片、视频等文件
16 0
|
17天前
|
Linux Shell 数据库
python Django教程 之 安装、基本命令、视图与网站
python Django教程 之 安装、基本命令、视图与网站
|
20天前
|
机器学习/深度学习 开发工具 Python
【Azure 应用服务】使用Python Azure SDK 来获取 App Service的访问限制信息(Access Restrictions)
【Azure 应用服务】使用Python Azure SDK 来获取 App Service的访问限制信息(Access Restrictions)
|
20天前
|
开发工具
【Azure 环境】使用Microsoft Graph PS SDK 登录到中国区Azure, 命令Connect-MgGraph -Environment China xxxxxxxxx 遇见登录错误
【Azure 环境】使用Microsoft Graph PS SDK 登录到中国区Azure, 命令Connect-MgGraph -Environment China xxxxxxxxx 遇见登录错误
|
16天前
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
34 0
|
1月前
|
开发工具 Android开发
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
132 4
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
|
1月前
|
Dart 开发工具 Android开发
Android Studio导入Flutter项目提示Dart SDK is not configured
Android Studio导入Flutter项目提示Dart SDK is not configured
68 4