connect.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package network
  2. import (
  3. "golang.org/x/net/context"
  4. "github.com/docker/docker/api/client"
  5. "github.com/docker/docker/cli"
  6. "github.com/docker/docker/opts"
  7. runconfigopts "github.com/docker/docker/runconfig/opts"
  8. "github.com/docker/engine-api/types/network"
  9. "github.com/spf13/cobra"
  10. )
  11. type connectOptions struct {
  12. network string
  13. container string
  14. ipaddress string
  15. ipv6address string
  16. links opts.ListOpts
  17. aliases []string
  18. linklocalips []string
  19. }
  20. func newConnectCommand(dockerCli *client.DockerCli) *cobra.Command {
  21. opts := connectOptions{
  22. links: opts.NewListOpts(runconfigopts.ValidateLink),
  23. }
  24. cmd := &cobra.Command{
  25. Use: "connect [OPTIONS] NETWORK CONTAINER",
  26. Short: "Connect a container to a network",
  27. Args: cli.ExactArgs(2),
  28. RunE: func(cmd *cobra.Command, args []string) error {
  29. opts.network = args[0]
  30. opts.container = args[1]
  31. return runConnect(dockerCli, opts)
  32. },
  33. }
  34. flags := cmd.Flags()
  35. flags.StringVar(&opts.ipaddress, "ip", "", "IP Address")
  36. flags.StringVar(&opts.ipv6address, "ip6", "", "IPv6 Address")
  37. flags.Var(&opts.links, "link", "Add link to another container")
  38. flags.StringSliceVar(&opts.aliases, "alias", []string{}, "Add network-scoped alias for the container")
  39. flags.StringSliceVar(&opts.linklocalips, "link-local-ip", []string{}, "Add a link-local address for the container")
  40. return cmd
  41. }
  42. func runConnect(dockerCli *client.DockerCli, opts connectOptions) error {
  43. client := dockerCli.Client()
  44. epConfig := &network.EndpointSettings{
  45. IPAMConfig: &network.EndpointIPAMConfig{
  46. IPv4Address: opts.ipaddress,
  47. IPv6Address: opts.ipv6address,
  48. LinkLocalIPs: opts.linklocalips,
  49. },
  50. Links: opts.links.GetAll(),
  51. Aliases: opts.aliases,
  52. }
  53. return client.NetworkConnect(context.Background(), opts.network, opts.container, epConfig)
  54. }