从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”。请回答这个问题?