自动化 az 容器执行
Automate az container exec
AZ 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
AZ 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 实现自动化,您还需要
- 我在此处的 Azure Pipelines 中为 运行 编写了一个完整的脚本:https://github.com/czmirek/stuff/blob/master/azexecmultiple/script.sh
az login
和 --service-principal