如何向docker API添加新的自定义命令?

时间:2015-11-24 10:20:12

标签: docker ubuntu-14.04

我正在尝试向docker API添加一个新的自定义命令,以及在docker/api/client找到的所有命令

我将以下新mycomand.go文件添加到分叉存储库中:

package client    
import (
    "fmt"
    Cli "github.com/docker/docker/cli"
    flag "github.com/docker/docker/pkg/mflag"
)    
func (cli *DockerCli) CmdMycomnd(args ...string) error {
    cmd := Cli.Subcmd("CmdMycomnd", []string{"CONTAINER"}, Cli.DockerCommands["CmdMycomnd"].Description, true)
    cmd.Require(flag.Exact, 1)    
    cmd.ParseFlags(args, true)    
    fmt.Println("Hi!")      
    return nil

}

还更新了docker/cli/common DockerCommands数据结构以包含我的新命令。 然后按照docker doc page上的说明将提交推送到github中的分支。

现在,使用make构建docker,并尝试通过以下命令执行bundles/1.10.0-dev/binary/中找到的'new'泊坞窗的二进制文件:

./docker-1.10.0-dev mycomnd [option]

问题:我收到错误:docker: 'mycomnd' is not a docker command.知道怎么解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

  1. 您需要在目录.go中添加/api/client文件以及所有API命令。 文件名应与命令名相同。

  2. .go文件中,您应该在名为Cmd[YourCommandName]

  3. 的函数中包含您的命令。
  4. 提交并将更改推送到forked github分支。
  5. 制作二进制文件
  6. 示例:

    假设您要添加命令'talk',请执行以下操作:

    1. 添加名为talk.go的新源文件:$ touch talk.go
    2. 添加.go源文件的内容。
    3. 在git hub上更新项目:

      • $ git add talk.go 注意:您的密码应为/api/client
      • $ git commit -s -m "Making a dry run test."
      • $ git push --set-upstream origin dry-run-test
      • $ <add your github account name + password>
    4. 现在将目录更改为docker-master目录,将make项目更改为
    5. 将目录更改为/bundles/1.10.0-dev/binary
    6. 执行:./ docker-1-10-dev talk
    7. DONE!
    8. talk命令的内容:

      package client
      
      import (
          "fmt"
          Cli "github.com/docker/docker/cli"
          flag "github.com/docker/docker/pkg/mflag"
      )
      
      func (cli *DockerCli) CmdTalk (args ...string) error {
          cmd := Cli.Subcmd("talk", []string{"CONTAINER"}, Cli.DockerCommands["talk"].Description, true)
          cmd.Require(flag.Exact, 0)
          cmd.ParseFlags(args, true)
          fmt.Println("Hi")   
          return nil
      }
      

      屏幕截图 enter image description here