首页 > 解决方案 > 从 bash 脚本调用 docker run 的奇怪行为

问题描述

我尝试从 bash 脚本运行 docker run 并且 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=’–restart=always -d’

来自 docker 的消息是:docker: 来自守护进程的错误响应:无效的重启策略 'always -d',但打印消息包含:opts:–restart=always -d

有人删除 --restart=

标签: bashdocker

解决方案


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


推荐阅读