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 &
的 stdin、stdout、stderr 似乎也是一个输入,因此当您将其与命令 /bin/bash
一起使用时,它是一个多参数命令。当然,这是行不通的。
Azure容器实例只是提供了快速运行的功能,但并不能很好地支持太多的控制。因此,如果您想对容器有更多控制,我建议您使用 AKS 或直接在虚拟机中配置 Docker 服务器。这两种方式可以让你更好地控制容器。
我学会了如何使用
screen
多路复用器来做到这一点!
sudo screen -S azexec -dmL bash
azexec
-L
参数使所有输出都保存到文件中screenlog.0
-d
参数使终端分离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
在屏幕终端中安装一次后,它就会保留在那里。自动化该过程应该很简单。az login
和 --service-principal