远程API用于执行Docker exec命令

3

请问有人能帮我解决远程API来使用docker exec运行命令的问题吗?

我可以直接运行它:

# docker exec 941430a3060c date
Fri Apr 29 05:18:03 UTC 2016

你能解释一下你的问题吗? - undefined
我想在正在运行的容器上执行一个命令。例如:date,ls等。我知道上述提到的CLI可以工作。我需要使用远程API来实现相同的功能。 - undefined
2个回答

3

您需要按照以下步骤进行操作。我会提供 REST API 方式,您可以将其编写成任何语言。

  1. 执行 CREATE 操作

POST /containers/(id 或 name)/exec

请求体

{
  "AttachStdin": false,
  "AttachStdout": true,
  "AttachStderr": true,
  "Cmd": ["bash","-c","echo '*/5 * * * * /usr/bin/php /app/yii cronrun/job001'>> /var/spool/cron/crontabs/root"]
}

当您进行POST操作时,需要选择Content-Type: application/json

在上述数据中进行POST操作后,您将在响应中获得id。您需要在下一步中使用该id。

*以上内容将在容器中添加cron作业,每五分钟执行一次。


  1. EXEC START

POST /exec/(id)/start

{
 "Detach": false,
 "Tty": false
}

您需要选择Content-Type: application/json

检查响应代码,200表示正常


1

对您有帮助的API部分是:Exec Create/Start

您可以在integration-cli/docker_api_exec_test.go中看到一些示例。

  • create:

    sockRequest("POST", fmt.Sprintf("/containers/%s/exec", name), map[string]interface{}{"Cmd": []string{"true"}})
    
  • start:

    sockRequestRaw("POST", fmt.Sprintf("/exec/%s/start", id), strings.NewReader(`{"Detach": true}`), "application/json")
    
  • inspect:

    sockRequestRaw("GET", fmt.Sprintf("/exec/%s/json", id), nil, "")
    

是的,我做到了,但是我在哪里可以获取命令的输出? - undefined
@JayashreeRamamoorthy 这就是最后一个 inspect GET 命令应该执行的操作。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接