linux - 从 bash 提示符和脚本向 docker exec 传递参数

我正在尝试在我的 mongodb docker 容器中执行命令。在我的 linux 命令提示符下,它非常简单并且在我执行此操作时可以工作

docker exec -it d886e775dfad mongo --eval 'rs.isMaster()'

上面告诉我去一个容器并执行命令

"mongo --eval 'rs.isMaster()' - This tells mongo to take rs.isMaster() as an input and execute it. This works and gives me the output.

因为我试图通过 bash 脚本自动执行此操作,所以我这样做了

cmd="mongo --eval 'rs.isMaster()"

然后尝试像这样执行

docker -H $node2 exec d886e775dfad "$cmd"

但我想不知何故 docker 认为现在容器内的二进制文件不是 mongo 或其他东西,它给了我以下错误:

rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"mongo --eval 'rs.isMaster()'\": executable file not found in $PATH"

最佳答案

docker exec -it d886e775dfad sh -c "mongo --eval 'rs.isMaster()'"

这会调用 shell (sh) 执行带引号的脚本。 请注意,这还修复了通配符 (*) 之类的问题,否则这些问题无法与 docker exec 一起正常工作。

https://stackoverflow.com/questions/43646273/

相关文章:

node.js - Mongoose(或类似的 ODM)内存记录注册表?

node.js - mongoose.connection.collections.collecti

mongodb - 为什么 mongo dot notation 会替换整个子文档?

javascript - 如何将文件名设置为与数据库中的对象 ID 相同?

python - 大内存 Python 后台作业

mongodb - 语法错误 : missing ) after argument list @(s

javascript - 如何在 Node 议程中以编程方式定义多个具有相同名称的作业

node.js - Mongoose 复合索引创建字段顺序

mongodb - 如何为 mongodb 副本集配置 grails 3

java - 从 JAVA 应用程序使用 SSL 连接到 MongoDb