【问题标题】:Running `docker run` from bash script fails. Command does not fail on Command Line从 bash 脚本运行 `docker run` 失败。命令在命令行上不会失败
【发布时间】:2019-05-28 04:35:41
【问题描述】:

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

docker run -t repo:tag ls -l

命令成功了。但是,如果我从 bash 脚本中调用相同的内容,则会收到以下错误:

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

bash 脚本导致这个错误的原因是什么?

【问题讨论】:

  • 没有看到脚本的确切调用,我会说你错误地引用了参数,所以"ls" "-l" 变成了"ls -l"
  • 您是否尝试在 bash 脚本中运行时删除 -t 标志?
  • @DanFarrell 是的,“ls”“-l”被视为“ls -l”。请将此作为答案?

标签: bash docker


【解决方案1】:

"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 视为单独的参数,以便将参数 -lls 可执行文件名称区分开来。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 2019-05-24
    • 2016-10-13
    • 2013-09-28
    • 2013-02-06
    相关资源
    最近更新 更多