自动化 az 容器执行

时间:2021-02-24 18:05:37

标签: bash ubuntu azure-cli

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

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

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

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

2 个答案:

答案 0 :(得分:1)

我学会了如何使用 screen 多路复用器做到这一点!

设置

sudo screen -S azexec -dmL bash

  • 这会创建一个新的独立终端,运行 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

答案 1 :(得分:0)

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

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

相关问题