我正在使用这个命令: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 命令中使用了反引号而不是单引号。当您运行命令并且有反引号时,这些反引号会首先被解释,并且它们之间的任何内容都会在主机上运行。然后,该命令的输出将放置在命令行上该反引号命令的位置。