我正在尝试向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.
知道怎么解决这个问题吗?
答案 0 :(得分:0)
您需要在目录.go
中添加/api/client
文件以及所有API命令。
文件名应与命令名相同。
在.go
文件中,您应该在名为Cmd[YourCommandName]
示例:强>
假设您要添加命令'talk',请执行以下操作:
talk.go
的新源文件:$ touch talk.go
.go
源文件的内容。在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>
make
项目更改为 新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
}