自动化 az 容器执行

Automate az container exec

A​​Z CLI 支持在 运行 容器中执行 单个 命令。

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

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

是否可以通过 stdin, stdout, stderr 重定向或多路复用来解决这个问题?

如您所知,命令 az container exec 仅支持单个命令。而且你作为< testpipe >/dev/null 2>&1 &使用的标准输入、标准输出、标准错误似乎也是一个输入,所以当你将它与命令/bin/bash一起使用时,它是一个多参数命令。当然不行。

Azure Container Instance 只是提供了一个快速的运行特性,但是它并没有很好地支持很多控制。所以如果你想对容器有更多的控制,我建议你使用 AKS 或直接在 VM 中配置一个 Docker 服务器。这两种方式可以让您更好地控制容器。

我学会了如何使用 screen 多路复用器!

设置

sudo screen -S azexec -dmL bash

  • 这将创建一个新的分离终端 运行ning bash,名称为 azexec
  • -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,它模拟回车键

警告

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