【发布时间】:2019-11-21 03:55:53
【问题描述】:
我正在尝试在我的机器上的其他机器上的 docker 上执行命令。当我执行这个命令时:
- name: Add header
command: docker exec cli bash -l -c "echo '{"payload":{"header":{"channel_header":{"channel_id":"gll", "type":2}},"data":{"config_update":'$(cat jaguar_update.json)'}}}' | jq . > jaguar_update_in_envelope.json"
通过 ansible playbook,我收到如下所示的错误。
fatal:[
command-task
]:FAILED! =>{
"changed":true,
"cmd":[ ],
"delta":"0:00:00.131115",
"end":"2019-07-11 17:32:44.651504",
"msg":"non-zero return code",
"rc":4,
"start":"2019-07-11 17:32:44.520389",
"stderr":"mesg: ttyname
failed: Inappropriate ioctl for device\nparse error: Invalid numeric
literal at line 1, column 9",
"stderr_lines":[
"mesg: ttyname failed:
Inappropriate ioctl for device",
"parse error: Invalid numeric literal
at line 1, column 9"
],
"stdout":"",
"stdout_lines":[
]
}
但是如果我在 docker 容器中手动执行命令,它工作正常,我没有遇到任何问题。
编辑:
正如建议的那样,我尝试使用shell 模块
shell: docker exec cli -it bash -l -c "echo '{"payload":{"header":{"channel_header":{"channel_id":"gll", "type":2}},"data":{"config_update":'$(cat jaguar_update.json)'}}}' | jq . > jaguar_update_in_envelope.json"
但我得到以下错误
致命:[命令任务]:失败! => {“改变”:真,“cmd”:“码头工人 exec cli -it bash -l -c echo '{\"payload\":{\"header\":{\"channel_header\":{\"channel_id\":\"gll\", \"type\":2}},\"data\":{\"config_update\":'$(cat jaguar_update.json)'}}}' | 。 > jaguar_update_in_envelope.json", “增量”:“0:00:00.110341”,“结束”:“2019-07-12 10:21:45.204049”,“味精”: "非零返回码", "rc": 4, "start": "2019-07-12 10:21:45.093708", "stderr": "cat: jaguar_update.json: 没有这样的文件或 目录\n解析错误:第 1 行第 4 列的数字文字无效", "stderr_lines": ["cat: jaguar_update.json: 没有这样的文件或目录", “解析错误:第 1 行第 4 列的数字文字无效”]、“stdout”: "", "stdout_lines": []}
工作目录中存在的所有文件“jaguar_update.json”。我已经确认了工作目录。
如果我将上面的命令放在 shell 脚本文件中,然后从 ansible 执行 shell 脚本,则上述命令有效。
【问题讨论】:
-
你可以试试
docker exec -it cli bash -l -c交互式终端的-it选项。试试看。 -
它不起作用
-
可以试试shell模块吗?
-
此处需要
shell而不是command。管道和重定向不适用于command。下一个问题将是嵌套引用。 -
这里的shell应该如何使用?
标签: shell docker ansible hyperledger-fabric