【发布时间】:2019-09-15 16:08:03
【问题描述】:
我尝试从 bash 脚本运行 docker run 并且 docker 说: “不是 docker 命令” 如果我在调用 docker 之前打印 docker 命令行,然后将其复制到剪贴板并将其粘贴到命令行,则效果很好!
这是 bash 脚本中的命令:
local args="run ${nw_param} ${opts} --name ${img} ${repository}/${img}:${tag}"
docker ${args}
args 字符串的当前回显是:
run --net=ehvb-network -d --restart=always --name my-module my-private-registry:5000/my-module:0.0.1-1555334810
当我将此字符串复制到剪贴板并将其粘贴到命令行时,它运行良好。 我使用 Debian 拉伸。我的脚本正在使用 bash (#!/bin/bash)
当我删除 ${opts} 时,它会从 bash 中运行。 Opts 当前包含“-d --restart=always”。当我尝试仅使用 -d 或仅使用 --restart=always 时效果很好。但是当我尝试将两者一起使用时,效果并不好。 我尝试这样定义 opts:
opts=’–restart=always -d’
来自 docker 的消息是: docker:来自守护进程的错误响应:无效的重启策略“always -d”,但打印消息包含: opts:--restart=always -d
有人删除了 --restart=
【问题讨论】:
-
嗯,我正在努力重现这一点。当您使用
local时,我假设您在函数中运行它。你能提供这个的代码吗? -
请注意,使用
$opts通常是不好的形式;选项列表应该存储在数组中,而不是字符串中,以避免各种细微的错误。参见BashFAQ #50:我正在尝试将命令放入变量中,但复杂的情况总是失败!