LXD 命令在主机而不是容器上执行

LXD 命令在主机而不是容器上执行

我正在使用这个命令:lxc exec container -- sh -c 'sqlcmd -S localhost -U SA -P <..> -i <...>',但它将在主机而不是容器上执行。

但是当我lxc shell container运行的时候sqlcmd -S localhost -U SA -P <..> -i <...>,命令运行正常。

这里发生了什么?为什么它不在容器中执行?我正在使用其他命令,例如lxc exec container -- touch testfile,这不会引发任何问题。

答案1

我最终发现,与其使用,sqlcmd我不如使用命令的完整路径。该命令确实在容器中执行,但尽管我可以在容器内运行该命令,但从外部执行时找不到该命令。我误解了错误消息,认为是在主机上执行,这是不正确的。我猜这取决于如何设置 sqlcmd 的路径。

答案2

当你跑步时lxc exec mycontainer -- somecommand一些命令(在 之后找到的任何东西--)都在容器中运行。

根据经验,如果一个复杂的命令表现得很奇怪,那么你应该尽可能地简化它。为什么这个长的 SQL 命令会在主机上运行,​​而不是其他一些较短的命令?

您很可能在该 SQL 命令中使用了反引号而不是单引号。当您运行命令并且有反引号时,这些反引号会首先被解释,并且它们之间的任何内容都会在主机上运行。然后,该命令的输出将放置在命令行上该反引号命令的位置。

相关内容