12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package network
- import (
- "golang.org/x/net/context"
- "github.com/docker/docker/api/client"
- "github.com/docker/docker/cli"
- "github.com/docker/docker/opts"
- runconfigopts "github.com/docker/docker/runconfig/opts"
- "github.com/docker/engine-api/types/network"
- "github.com/spf13/cobra"
- )
- type connectOptions struct {
- network string
- container string
- ipaddress string
- ipv6address string
- links opts.ListOpts
- aliases []string
- linklocalips []string
- }
- func newConnectCommand(dockerCli *client.DockerCli) *cobra.Command {
- opts := connectOptions{
- links: opts.NewListOpts(runconfigopts.ValidateLink),
- }
- cmd := &cobra.Command{
- Use: "connect [OPTIONS] NETWORK CONTAINER",
- Short: "Connect a container to a network",
- Args: cli.ExactArgs(2),
- RunE: func(cmd *cobra.Command, args []string) error {
- opts.network = args[0]
- opts.container = args[1]
- return runConnect(dockerCli, opts)
- },
- }
- flags := cmd.Flags()
- flags.StringVar(&opts.ipaddress, "ip", "", "IP Address")
- flags.StringVar(&opts.ipv6address, "ip6", "", "IPv6 Address")
- flags.Var(&opts.links, "link", "Add link to another container")
- flags.StringSliceVar(&opts.aliases, "alias", []string{}, "Add network-scoped alias for the container")
- flags.StringSliceVar(&opts.linklocalips, "link-local-ip", []string{}, "Add a link-local address for the container")
- return cmd
- }
- func runConnect(dockerCli *client.DockerCli, opts connectOptions) error {
- client := dockerCli.Client()
- epConfig := &network.EndpointSettings{
- IPAMConfig: &network.EndpointIPAMConfig{
- IPv4Address: opts.ipaddress,
- IPv6Address: opts.ipv6address,
- LinkLocalIPs: opts.linklocalips,
- },
- Links: opts.links.GetAll(),
- Aliases: opts.aliases,
- }
- return client.NetworkConnect(context.Background(), opts.network, opts.container, epConfig)
- }
|