【发布时间】:2020-01-16 05:51:34
【问题描述】:
我创建了一个 bin/bash 命令文件,试图 将不同的命令执行到 docker 容器中。
当我启动以下命令时:
password='$2y$10$vXBqzZa3oNhMG/3qj10weehWDP4rkfn/R0sctThBb5nLDpLjOlLSu'
docker exec -it ${imageName} /bin/sh -c "mongo -u user -p password --eval \"db = db.getSiblingDB('db'); db.users.insertOne({'role':'Admin', 'name':'aaa', 'email':'a@a.com', 'password': '${password}' }); db.users.find();\" "
它运行并成功地将新的 'Admin' 用户插入数据库 'db' (mongoDb) 但它错误地解析了“密码”变量。
{ "_id" : ObjectId("5d7d4aee81d1b750455423ef"), "role" : "Admin", "name" : "aaa", "email" : "a@a.com", "password" : "y0/3qj10weehWDP4rkfn/R0sctThBb5nLDpLjOlLSu" }
我认为 bash 将特殊字符 $ 解释为变量。
所以密码的第一部分: $2y$10$vXBqzZa3oNhMG
变成: y0
感谢您的帮助。
【问题讨论】:
-
使用单引号而不是双引号
-
通常你不应该使用
docker exec来与你的容器提供的网络服务进行交互。在您的主机系统上安装mongo客户端并正常调用您的服务。 (如果您在真实服务器上运行此程序,您会以 root 身份 ssh 到服务器中插入数据吗?) -
如果你坚持使用这种方法,
/bin/sh -c包装器是不必要的,额外的引用层会带来麻烦。尝试将echo添加到命令的最前面,以查看 shell 对其执行的操作。
标签: mongodb bash docker hash special-characters