自动化 az 容器执行

问题描述 投票:0回答:2

AZ CLI 支持在正在运行的容器中执行单个命令。

az container exec -g myresourcegroup -n nginxtest --exec-command /bin/bash

因此,您无法像使用 docker 那样直接在现有容器上自动运行多个命令。

是否可以通过

stdin, stdout, stderr
重定向或多路复用来解决这个问题?

bash ubuntu azure-cli azure-container-instances
2个回答
1
投票

如您所知,命令

az container exec
仅支持单个命令。而且您用作
< testpipe >/dev/null 2>&1 &
的 stdin、stdout、stderr 似乎也是一个输入,因此当您将其与命令
/bin/bash
一起使用时,它是一个多参数命令。当然,这是行不通的。

Azure容器实例只是提供了快速运行的功能,但并不能很好地支持太多的控制。因此,如果您想对容器有更多控制,我建议您使用 AKS 或直接在虚拟机中配置 Docker 服务器。这两种方式可以让你更好地控制容器。


1
投票

我学会了如何使用

screen
多路复用器来做到这一点!

设置

sudo screen -S azexec -dmL bash

  • 这将创建一个新的独立终端,运行名为
    azexec
  • 的 bash
  • -L
    参数使所有输出都保存到文件中
    screenlog.0
  • -d
    参数使终端分离
  • 现在它刚刚启动一个新的 bash 终端

sudo screen -S azexec -p 0 -X stuff "az container exec -g myresourcegroup -n nginxtest --exec-command /bin/bash^M"

  • 您发送
    az container exec
    ,一段时间后,分离终端切换到集装箱码头
  • 如果您尝试自动执行此操作,则需要
    sleep
    等待一段时间,以便在运行任何其他命令之前输入
    az
    命令

运行任何命令

sudo screen -S azexec -p 0 -X stuff "ANY_COMMAND^M"

  • 不要忘记
    stuff
    关键字
  • 不要忘记在命令末尾添加
    ^M
    ,它模拟 Enter 键

警告

  • 使用多路复用器时,您可以控制终端,而不是控制在终端内运行的命令。您需要
    sleep
    或以其他方式处理命令的完成。
  • 如果您刚刚安装了
    screen
    那么您将不会在终端中看到安装的
    az
    软件包。但是,当您使用
    apt
    在屏幕终端中安装一次后,它就会保留在那里。自动化该过程应该很简单。
  • 如果您想使用 Azure Pipelines 自动执行此操作,还需要
    az login
    --service-principal
  • 我在这里编写了一个在 Azure Pipelines 中运行的完整脚本:https://github.com/czmirek/stuff/blob/master/azexecmultiple/script.sh
© www.soinside.com 2019 - 2024. All rights reserved.