AZ CLI 支持在正在运行的容器中执行单个命令。
az container exec -g myresourcegroup -n nginxtest --exec-command /bin/bash
因此,您无法像使用 docker 那样直接在现有容器上自动运行多个命令。
是否可以通过 stdin, stdout, stderr
重定向或多路复用来解决这个问题?
答案 0 :(得分:1)
我学会了如何使用 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
,它模拟输入键sleep
或以其他方式处理命令的完成。screen
,那么您将不会在其终端中看到安装了 az
软件包。但是在使用 apt
在屏幕终端中安装一次后,它会留在那里。自动化该过程应该是微不足道的。az login
和 --service-principal
答案 1 :(得分:0)
如您所知,命令 az container exec
仅支持单个命令。似乎您用作 < testpipe >/dev/null 2>&1 &
的 stdin、stdout、stderr 也是输入,因此当您将它与命令 /bin/bash
一起使用时,它是一个多参数命令。当然不行。
Azure Container Instance 只是提供了一个快速运行的特性,但它并没有很好地支持很多控制。所以如果你想对容器有更多的控制,我建议你使用 AKS 或直接在 VM 中配置一个 Docker 服务器。这两种方式可以让您更好地控制容器。