docker中的MongoDB:将变量传递给脚本



下一个命令需要正确语法的帮助:

sudo docker exec wekan-db sh -c 'mongo -u {{ admin_user }} -p {{ mongo_password }} --authenticationDatabase admin --eval 'var ID_draft_user='{{ user_hash.stdout }}'' /data/mongo_info_user.js'

MongoDB正在docker容器中运行。上面的命令用于ansible playbook(shell模块(,并且在其中一个任务期间注册user_hash值。

问题是,无论我试图以何种方式传递user_hash.stdout变量,我都会得到:

MongoDB shell version v4.4.2
connecting to: mongodb://127.0.0.1:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("29aebb5d-5e0f-4aa4-b40a-7ef4f6cf323a") }
MongoDB server version: 4.4.2
uncaught exception: SyntaxError: missing variable name :
@(shell eval):1:3
exiting with code -4

假设在传递变量时应该还有一步,但对js不太熟悉,所以也许有人可以给我明确的解释这里的错误。

js脚本是例如:

db = db.getSiblingDB('test')
db.users.find({ _id: ID_draft_user }).pretty()

好吧,在我的情况下,有两种简单的方法可以解决它:

  1. 创建带有变量的独立js脚本,并在我注册了所需的事实后上传
  2. 创建单独的js脚本,只需使用"替换";以设置所需的值

在这两种方式中,脚本都被上传到容器中,而我只是使用docker exec通过ansible运行它

最新更新