从bash脚本运行'docker run'失败。命令不会在命令行中失败

从bash脚本运行'docker run'失败。命令不会在命令行中失败,bash,docker,Bash,Docker,如果我从命令行运行以下命令 docker run -t repo:tag ls -l 命令成功了。但是,如果从bash脚本中调用相同的脚本,则会出现以下错误: docker:来自守护程序的错误响应:OCI运行时创建失败: container\u linux.go:348:启动容器进程导致“exec:\”ls -l\“:在$PATH中找不到可执行文件”:未知 导致此错误的bash脚本是什么 “exec:\“ls-l\”:在$PATH中找不到可执行文件” 从错误中我可以看出,当您调用docker时

如果我从命令行运行以下命令

docker run -t repo:tag ls -l
命令成功了。但是,如果从bash脚本中调用相同的脚本,则会出现以下错误:

docker:来自守护程序的错误响应:OCI运行时创建失败: container\u linux.go:348:启动容器进程导致“exec:\”ls -l\“:在$PATH中找不到可执行文件”:未知

导致此错误的bash脚本是什么

“exec:\“ls-l\”:在$PATH中找不到可执行文件”

从错误中我可以看出,当您调用docker时,您以某种方式使用
ls-l
调用,包括空格作为一个参数。大概

docker run -t repo:tag "ls -l" # wrong
或许

cmd="ls -l" 
docker run -t repo:tag "$cmd" # wrong
解析docker命令的shell必须将
ls
-l
视为单独的参数,以便将参数
-l
ls
可执行文件名称区分开来

cmd="ls -l" 
docker run -t repo:tag $cmd #works

在没有看到脚本的确切调用的情况下,我会说您错误地引用了参数,因此
“ls”“-l”
变成了
“ls-l”
。在bash脚本中运行时是否尝试删除
-t
标志?@DanFarrell yes“ls”“-l”被视为“ls-l”。请回答这个问题?