bash - 从 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=
解决方案
问题是,我在脚本中使用了来自其他 bash 命令的变量(如 curl、ps 等)。所有这些变量都以回车符 \r 结尾。当我尝试将这些变量插入到 docker 参数字符串中时, \r 在其中。我需要补充:| sed 's/\r//' 到所有这些命令。
推荐阅读
- javascript - 有条件地在 Angular 路由器的空路径上加载模块
- javascript - 在 ReactJS 中按属性动态过滤
- java - 使用 Spark SQL 的 Java 中的美元符号函数调用
- javascript - 如何创建嵌套 For 循环以在我的 Nightmare javascript 代码中输入数据
- ambari - Splice Machine 主安装在 HDP 2.6.4 上产生错误
- c++ - 我怎样才能存储一个ID
在 C++ 代码中? - jenkins - 如何根据日期和相应的标签运行测试
- arrays - 使用数组存储数据,是好是坏?
- python - 替换 Tkinter 小部件的内容
- java - 如何修复 FileInputStream 只查看最后一个条目?