我尝试从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 Stretch。我的脚本正在使用bash(#!/ bin / bash)
当我删除$ {opts}时,它会从bash运行。选项当前包含“ -d --restart = always”。当我尝试仅使用-d或--restart = always时,它总是可以正常工作。但是,当我尝试同时使用这两种方法时,效果并不理想。 我尝试定义这样的选择:
opts=’–restart=always -d’
来自docker的消息是: docker:来自守护程序的错误响应:无效的重启策略“ always -d”,但打印消息包含: 选择:–restart = always -d
有人删除--restart =
答案 0 :(得分:0)
问题是,我在脚本中使用了来自其他bash命令的变量(例如curl,ps等)。所有这些变量都以回车符\ r结尾。当我尝试将这些变量插入docker参数字符串时\ r在其中。我需要添加: | sed's / \ r //'到所有这些命令。
答案 1 :(得分:-1)
opts=’–restart=always -d’
在重新启动之前,您在其中缺少一个破折号。
为了进行调试,我建议从bash脚本中回显所有部分变量。