mirror of https://github.com/docker/docs.git
Expose bridge IPv6 setting to `docker network inspect`
Signed-off-by: Aidan Hobson Sayers <aidanhs@cantab.net>
This commit is contained in:
parent
73ee139d7a
commit
dfb00652aa
|
@ -50,6 +50,7 @@ func (cli *DockerCli) CmdNetworkCreate(args ...string) error {
|
||||||
cmd.Var(flIpamOpt, []string{"-ipam-opt"}, "set IPAM driver specific options")
|
cmd.Var(flIpamOpt, []string{"-ipam-opt"}, "set IPAM driver specific options")
|
||||||
|
|
||||||
flInternal := cmd.Bool([]string{"-internal"}, false, "restricts external access to the network")
|
flInternal := cmd.Bool([]string{"-internal"}, false, "restricts external access to the network")
|
||||||
|
flIPv6 := cmd.Bool([]string{"-ipv6"}, false, "enables IPv6 on the network")
|
||||||
|
|
||||||
cmd.Require(flag.Exact, 1)
|
cmd.Require(flag.Exact, 1)
|
||||||
err := cmd.ParseFlags(args, true)
|
err := cmd.ParseFlags(args, true)
|
||||||
|
@ -77,6 +78,7 @@ func (cli *DockerCli) CmdNetworkCreate(args ...string) error {
|
||||||
Options: flOpts.GetAll(),
|
Options: flOpts.GetAll(),
|
||||||
CheckDuplicate: true,
|
CheckDuplicate: true,
|
||||||
Internal: *flInternal,
|
Internal: *flInternal,
|
||||||
|
EnableIPv6: *flIPv6,
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, err := cli.client.NetworkCreate(nc)
|
resp, err := cli.client.NetworkCreate(nc)
|
||||||
|
|
|
@ -14,7 +14,7 @@ type Backend interface {
|
||||||
GetNetworkByName(idName string) (libnetwork.Network, error)
|
GetNetworkByName(idName string) (libnetwork.Network, error)
|
||||||
GetNetworksByID(partialID string) []libnetwork.Network
|
GetNetworksByID(partialID string) []libnetwork.Network
|
||||||
GetAllNetworks() []libnetwork.Network
|
GetAllNetworks() []libnetwork.Network
|
||||||
CreateNetwork(name, driver string, ipam network.IPAM, options map[string]string, internal bool) (libnetwork.Network, error)
|
CreateNetwork(name, driver string, ipam network.IPAM, options map[string]string, internal bool, enableIPv6 bool) (libnetwork.Network, error)
|
||||||
ConnectContainerToNetwork(containerName, networkName string, endpointConfig *network.EndpointSettings) error
|
ConnectContainerToNetwork(containerName, networkName string, endpointConfig *network.EndpointSettings) error
|
||||||
DisconnectContainerFromNetwork(containerName string, network libnetwork.Network, force bool) error
|
DisconnectContainerFromNetwork(containerName string, network libnetwork.Network, force bool) error
|
||||||
DeleteNetwork(name string) error
|
DeleteNetwork(name string) error
|
||||||
|
|
|
@ -91,7 +91,7 @@ func (n *networkRouter) postNetworkCreate(ctx context.Context, w http.ResponseWr
|
||||||
warning = fmt.Sprintf("Network with name %s (id : %s) already exists", nw.Name(), nw.ID())
|
warning = fmt.Sprintf("Network with name %s (id : %s) already exists", nw.Name(), nw.ID())
|
||||||
}
|
}
|
||||||
|
|
||||||
nw, err = n.backend.CreateNetwork(create.Name, create.Driver, create.IPAM, create.Options, create.Internal)
|
nw, err = n.backend.CreateNetwork(create.Name, create.Driver, create.IPAM, create.Options, create.Internal, create.EnableIPv6)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -160,6 +160,8 @@ func buildNetworkResource(nw libnetwork.Network) *types.NetworkResource {
|
||||||
r.ID = nw.ID()
|
r.ID = nw.ID()
|
||||||
r.Scope = nw.Info().Scope()
|
r.Scope = nw.Info().Scope()
|
||||||
r.Driver = nw.Type()
|
r.Driver = nw.Type()
|
||||||
|
r.EnableIPv6 = nw.Info().IPv6Enabled()
|
||||||
|
r.Internal = nw.Info().Internal()
|
||||||
r.Options = nw.Info().DriverOptions()
|
r.Options = nw.Info().DriverOptions()
|
||||||
r.Containers = make(map[string]types.EndpointResource)
|
r.Containers = make(map[string]types.EndpointResource)
|
||||||
buildIpamResources(r, nw)
|
buildIpamResources(r, nw)
|
||||||
|
|
|
@ -694,10 +694,8 @@ func initBridgeDriver(controller libnetwork.NetworkController, config *Config) e
|
||||||
}
|
}
|
||||||
// Initialize default network on "bridge" with the same name
|
// Initialize default network on "bridge" with the same name
|
||||||
_, err = controller.NewNetwork("bridge", "bridge",
|
_, err = controller.NewNetwork("bridge", "bridge",
|
||||||
libnetwork.NetworkOptionGeneric(options.Generic{
|
libnetwork.NetworkOptionEnableIPv6(config.bridgeConfig.EnableIPv6),
|
||||||
netlabel.GenericData: netOption,
|
libnetwork.NetworkOptionDriverOpts(netOption),
|
||||||
netlabel.EnableIPv6: config.bridgeConfig.EnableIPv6,
|
|
||||||
}),
|
|
||||||
libnetwork.NetworkOptionIpam("default", "", v4Conf, v6Conf, nil),
|
libnetwork.NetworkOptionIpam("default", "", v4Conf, v6Conf, nil),
|
||||||
libnetwork.NetworkOptionDeferIPv6Alloc(deferIPv6Alloc))
|
libnetwork.NetworkOptionDeferIPv6Alloc(deferIPv6Alloc))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -90,7 +90,7 @@ func (daemon *Daemon) GetAllNetworks() []libnetwork.Network {
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateNetwork creates a network with the given name, driver and other optional parameters
|
// CreateNetwork creates a network with the given name, driver and other optional parameters
|
||||||
func (daemon *Daemon) CreateNetwork(name, driver string, ipam network.IPAM, options map[string]string, internal bool) (libnetwork.Network, error) {
|
func (daemon *Daemon) CreateNetwork(name, driver string, ipam network.IPAM, netOption map[string]string, internal bool, enableIPv6 bool) (libnetwork.Network, error) {
|
||||||
c := daemon.netController
|
c := daemon.netController
|
||||||
if driver == "" {
|
if driver == "" {
|
||||||
driver = c.Config().Daemon.DefaultDriver
|
driver = c.Config().Daemon.DefaultDriver
|
||||||
|
@ -104,7 +104,8 @@ func (daemon *Daemon) CreateNetwork(name, driver string, ipam network.IPAM, opti
|
||||||
}
|
}
|
||||||
|
|
||||||
nwOptions = append(nwOptions, libnetwork.NetworkOptionIpam(ipam.Driver, "", v4Conf, v6Conf, ipam.Options))
|
nwOptions = append(nwOptions, libnetwork.NetworkOptionIpam(ipam.Driver, "", v4Conf, v6Conf, ipam.Options))
|
||||||
nwOptions = append(nwOptions, libnetwork.NetworkOptionDriverOpts(options))
|
nwOptions = append(nwOptions, libnetwork.NetworkOptionEnableIPv6(enableIPv6))
|
||||||
|
nwOptions = append(nwOptions, libnetwork.NetworkOptionDriverOpts(netOption))
|
||||||
if internal {
|
if internal {
|
||||||
nwOptions = append(nwOptions, libnetwork.NetworkOptionInternalNetwork())
|
nwOptions = append(nwOptions, libnetwork.NetworkOptionInternalNetwork())
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,6 +84,8 @@ func (s *DockerSuite) TestApiNetworkInspect(c *check.C) {
|
||||||
nr = getNetworkResource(c, nr.ID)
|
nr = getNetworkResource(c, nr.ID)
|
||||||
c.Assert(nr.Driver, checker.Equals, "bridge")
|
c.Assert(nr.Driver, checker.Equals, "bridge")
|
||||||
c.Assert(nr.Scope, checker.Equals, "local")
|
c.Assert(nr.Scope, checker.Equals, "local")
|
||||||
|
c.Assert(nr.Internal, checker.Equals, false)
|
||||||
|
c.Assert(nr.EnableIPv6, checker.Equals, false)
|
||||||
c.Assert(nr.IPAM.Driver, checker.Equals, "default")
|
c.Assert(nr.IPAM.Driver, checker.Equals, "default")
|
||||||
c.Assert(len(nr.Containers), checker.Equals, 1)
|
c.Assert(len(nr.Containers), checker.Equals, 1)
|
||||||
c.Assert(nr.Containers[containerID], checker.NotNil)
|
c.Assert(nr.Containers[containerID], checker.NotNil)
|
||||||
|
|
|
@ -574,18 +574,24 @@ func (s *DockerNetworkSuite) TestDockerNetworkInspectDefault(c *check.C) {
|
||||||
nr := getNetworkResource(c, "none")
|
nr := getNetworkResource(c, "none")
|
||||||
c.Assert(nr.Driver, checker.Equals, "null")
|
c.Assert(nr.Driver, checker.Equals, "null")
|
||||||
c.Assert(nr.Scope, checker.Equals, "local")
|
c.Assert(nr.Scope, checker.Equals, "local")
|
||||||
|
c.Assert(nr.Internal, checker.Equals, false)
|
||||||
|
c.Assert(nr.EnableIPv6, checker.Equals, false)
|
||||||
c.Assert(nr.IPAM.Driver, checker.Equals, "default")
|
c.Assert(nr.IPAM.Driver, checker.Equals, "default")
|
||||||
c.Assert(len(nr.IPAM.Config), checker.Equals, 0)
|
c.Assert(len(nr.IPAM.Config), checker.Equals, 0)
|
||||||
|
|
||||||
nr = getNetworkResource(c, "host")
|
nr = getNetworkResource(c, "host")
|
||||||
c.Assert(nr.Driver, checker.Equals, "host")
|
c.Assert(nr.Driver, checker.Equals, "host")
|
||||||
c.Assert(nr.Scope, checker.Equals, "local")
|
c.Assert(nr.Scope, checker.Equals, "local")
|
||||||
|
c.Assert(nr.Internal, checker.Equals, false)
|
||||||
|
c.Assert(nr.EnableIPv6, checker.Equals, false)
|
||||||
c.Assert(nr.IPAM.Driver, checker.Equals, "default")
|
c.Assert(nr.IPAM.Driver, checker.Equals, "default")
|
||||||
c.Assert(len(nr.IPAM.Config), checker.Equals, 0)
|
c.Assert(len(nr.IPAM.Config), checker.Equals, 0)
|
||||||
|
|
||||||
nr = getNetworkResource(c, "bridge")
|
nr = getNetworkResource(c, "bridge")
|
||||||
c.Assert(nr.Driver, checker.Equals, "bridge")
|
c.Assert(nr.Driver, checker.Equals, "bridge")
|
||||||
c.Assert(nr.Scope, checker.Equals, "local")
|
c.Assert(nr.Scope, checker.Equals, "local")
|
||||||
|
c.Assert(nr.Internal, checker.Equals, false)
|
||||||
|
c.Assert(nr.EnableIPv6, checker.Equals, false)
|
||||||
c.Assert(nr.IPAM.Driver, checker.Equals, "default")
|
c.Assert(nr.IPAM.Driver, checker.Equals, "default")
|
||||||
c.Assert(len(nr.IPAM.Config), checker.Equals, 1)
|
c.Assert(len(nr.IPAM.Config), checker.Equals, 1)
|
||||||
c.Assert(nr.IPAM.Config[0].Subnet, checker.NotNil)
|
c.Assert(nr.IPAM.Config[0].Subnet, checker.NotNil)
|
||||||
|
@ -600,6 +606,8 @@ func (s *DockerNetworkSuite) TestDockerNetworkInspectCustomUnspecified(c *check.
|
||||||
nr := getNetworkResource(c, "test01")
|
nr := getNetworkResource(c, "test01")
|
||||||
c.Assert(nr.Driver, checker.Equals, "bridge")
|
c.Assert(nr.Driver, checker.Equals, "bridge")
|
||||||
c.Assert(nr.Scope, checker.Equals, "local")
|
c.Assert(nr.Scope, checker.Equals, "local")
|
||||||
|
c.Assert(nr.Internal, checker.Equals, false)
|
||||||
|
c.Assert(nr.EnableIPv6, checker.Equals, false)
|
||||||
c.Assert(nr.IPAM.Driver, checker.Equals, "default")
|
c.Assert(nr.IPAM.Driver, checker.Equals, "default")
|
||||||
c.Assert(len(nr.IPAM.Config), checker.Equals, 1)
|
c.Assert(len(nr.IPAM.Config), checker.Equals, 1)
|
||||||
c.Assert(nr.IPAM.Config[0].Subnet, checker.NotNil)
|
c.Assert(nr.IPAM.Config[0].Subnet, checker.NotNil)
|
||||||
|
@ -610,12 +618,14 @@ func (s *DockerNetworkSuite) TestDockerNetworkInspectCustomUnspecified(c *check.
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *DockerNetworkSuite) TestDockerNetworkInspectCustomSpecified(c *check.C) {
|
func (s *DockerNetworkSuite) TestDockerNetworkInspectCustomSpecified(c *check.C) {
|
||||||
dockerCmd(c, "network", "create", "--driver=bridge", "--subnet=172.28.0.0/16", "--ip-range=172.28.5.0/24", "--gateway=172.28.5.254", "br0")
|
dockerCmd(c, "network", "create", "--driver=bridge", "--ipv6", "--subnet=172.28.0.0/16", "--ip-range=172.28.5.0/24", "--gateway=172.28.5.254", "br0")
|
||||||
assertNwIsAvailable(c, "br0")
|
assertNwIsAvailable(c, "br0")
|
||||||
|
|
||||||
nr := getNetworkResource(c, "br0")
|
nr := getNetworkResource(c, "br0")
|
||||||
c.Assert(nr.Driver, checker.Equals, "bridge")
|
c.Assert(nr.Driver, checker.Equals, "bridge")
|
||||||
c.Assert(nr.Scope, checker.Equals, "local")
|
c.Assert(nr.Scope, checker.Equals, "local")
|
||||||
|
c.Assert(nr.Internal, checker.Equals, false)
|
||||||
|
c.Assert(nr.EnableIPv6, checker.Equals, true)
|
||||||
c.Assert(nr.IPAM.Driver, checker.Equals, "default")
|
c.Assert(nr.IPAM.Driver, checker.Equals, "default")
|
||||||
c.Assert(len(nr.IPAM.Config), checker.Equals, 1)
|
c.Assert(len(nr.IPAM.Config), checker.Equals, 1)
|
||||||
c.Assert(nr.IPAM.Config[0].Subnet, checker.Equals, "172.28.0.0/16")
|
c.Assert(nr.IPAM.Config[0].Subnet, checker.Equals, "172.28.0.0/16")
|
||||||
|
|
|
@ -297,6 +297,9 @@ func (s *DockerSuite) TestPortExposeHostBinding(c *check.C) {
|
||||||
func (s *DockerSuite) TestPortBindingOnSandbox(c *check.C) {
|
func (s *DockerSuite) TestPortBindingOnSandbox(c *check.C) {
|
||||||
testRequires(c, DaemonIsLinux, NotUserNamespace)
|
testRequires(c, DaemonIsLinux, NotUserNamespace)
|
||||||
dockerCmd(c, "network", "create", "--internal", "-d", "bridge", "internal-net")
|
dockerCmd(c, "network", "create", "--internal", "-d", "bridge", "internal-net")
|
||||||
|
nr := getNetworkResource(c, "internal-net")
|
||||||
|
c.Assert(nr.Internal, checker.Equals, true)
|
||||||
|
|
||||||
dockerCmd(c, "run", "--net", "internal-net", "-d", "--name", "c1",
|
dockerCmd(c, "run", "--net", "internal-net", "-d", "--name", "c1",
|
||||||
"-p", "8080:8080", "busybox", "nc", "-l", "-p", "8080")
|
"-p", "8080:8080", "busybox", "nc", "-l", "-p", "8080")
|
||||||
c.Assert(waitRun("c1"), check.IsNil)
|
c.Assert(waitRun("c1"), check.IsNil)
|
||||||
|
|
Loading…
Reference in New Issue