从bash脚本运行docker的奇怪行为

时间:2019-04-26 07:18:22

标签: bash docker

我尝试从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 =

2 个答案:

答案 0 :(得分:0)

问题是,我在脚本中使用了来自其他bash命令的变量(例如curl,ps等)。所有这些变量都以回车符\ r结尾。当我尝试将这些变量插入docker参数字符串时\ r在其中。我需要添加: | sed's / \ r //'到所有这些命令。

答案 1 :(得分:-1)

opts=’–restart=always -d’在重新启动之前,您在其中缺少一个破折号。 为了进行调试,我建议从bash脚本中回显所有部分变量。