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

news/2024/11/17 12:50:35/文章来源:https://www.cnblogs.com/lulight/p/18357674

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 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/783454.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DCDC电路设计之FB引脚布线

该随笔从与非网上搬运,原文: 案例讲解,DCDC电源反馈路径的布线规则 下面为正文内容: 在本文中,将对用来将输出信号反馈给电源ic的FB引脚的布线进行说明。 反馈路径的布线 反馈信号的布线在信号布线过程中也需要特别注意。反馈信号如Figure 7-a左侧的电路图所示,输出电压经…

vue使用JavaScript运算符

第一:加法运算符{{变量+n}}<p>num参与运算{{num+12}}</p>let vm = new Vue({el : "#app",data : {num: 101,isOK: true,message: 你好,lan: Java,id: 1001,}})第二:三目运算符<!-- 三目运算符 --><p>三目运算符:{{isOK==2 ? 真: 假}}<…

Golang - goto语句

用途 可以无条件地转移到过程中指定的行。该语句通常与条件语句配合使用,可用来实现条件转移,构成循环,跳出循环体等功能,但在结构化程序设计中一般不主张使用goto语句,以免造成程序流程的混乱,使理解和调试程序都产生困难。 语法goto label; ... label: statement;注…

Day 42 动态规划 Part09

188. 买卖股票的最佳时机 IV 做完上一道题后再看就简单许多了。股票问题的重点就在于两点:找到所有的状态 状态如何转移对于本题,一共包含2*k种状态(第1,2...k次持有,第1,2...k次卖出)。状态间如何转移呢?见下图class Solution {public int maxProfit(int k, int[] pri…

【Python使用】嘿马python基础入门全体系教程第1篇:目标,计算机组成【附代码文档】

本教程的知识点为:计算机组成 什么是计算机? 计算机是由什么组成的? 1. 硬件系统: 2. 软件系统: 目标 运算符的分类 1. 算数运算符 2. 赋值运算符 3. 复合赋值运算符 判断语句和循环语句 if嵌套 1. if嵌套的格式 2. if嵌套的应用 if嵌套执行流程 容器:字符串、列表、元组…

Avnet ZUBoard 1CG开发板上手—深度学习新选择

本文主要介绍了Avnet ZUBoard 1CG开发板的特性、架构、硬件单元等概念,并对如何使用以太网接口和串口连接开发板进行基本介绍,同时辅以两个应用例程演示其功能。Avnet ZUBoard 1CG 开发板上手—深度学习新选择 摘要 本文主要介绍了 Avnet ZUBoard 1CG 开发板的特性、架构、硬…

5-用PyTorch实现线性回归

下面是损失函数下面是优化器 下面通过model.parameters()可以获得model中所有的参数点击查看代码 import torch from torch import devicex_data = torch.tensor([[1.0], [2.0], [3.0]]) y_data = torch.tensor([[2.0], [4.0], [6.0]])class LinearModel(torch.nn.Module):def …

一文搞懂应用架构的3个核心概念

如果你是一名业务开发,你可能要说,我整天就是做CRUD(增删改查),哪里需要了解什么应用架构设计? 经常有人说,程序员 35 岁之后很容易陷入瓶颈,被行业淘汰,我觉得原因其实就在此。 有些朋友在写代码的时候,可能没有太多考虑非功能性的需求、扩展性,只是完成功能,觉得…

Openwrt 配置 PS5 端口转发

ps5 端口转发前言前阵子申请了公网IP通过了想远程串流玩PS5 通过Socat配置端口转发后仅桌面端Chiaki可以远程串流PS5 改用Openwrt的防火墙转发使PSPlay+Chiaki都可串流环境Openwrt 22.03.6 状态 > 概览 > 固件版本步骤打开 网络 > 防火墙 > 端口转发 点击 添加 配置…

vue绑定属性的指令

前面学习的插值表达式{{}},并不能更改标签的属性。因此,以下的写法是错误的,<h1 titlle="{{title}}" >我是h1标签的内容</h1>如果想要给标签的属性绑定动态值,需要借助v-bind 的指令语法:v-bind:原生HTML标签的属性="data中定义的值",可以…

P5535 【XR-3】小道消息

先介绍伯特兰切比雪夫定理:伯特兰—切比雪夫定理说明:若整数n>3,则至少存在一个质数p,符合n<p<2n − 2。另一个稍弱说法是:对于所有大于1的整数n,至少存在一个质数p,符合n<p<2n。 知道这个之后这道题就很简单了,我们先简单想想一个质数在一天可以通知除去它的倍数…

CMake 构建 C++ 项目

使用 CMake 构建C++项目便于跨平台开发,在Linux上可以生成 makefile ,并通过 make来进行编译。在Windows上可以生成 .sln 项目,并结合VS继续进行开发,或 MSVC 编译器来直接将项目编译成目标文件。 1、 创建 .cpp 文件,以编译成exe程序 #include <iostream>int main(…