connect.go 1.8 KB

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