Expose bridge IPv6 setting to `docker network inspect`
| ... | ... |
@@ -50,6 +50,7 @@ func (cli *DockerCli) CmdNetworkCreate(args ...string) error {
|
| 50 | 50 |
cmd.Var(flIpamOpt, []string{"-ipam-opt"}, "set IPAM driver specific options")
|
| 51 | 51 |
|
| 52 | 52 |
flInternal := cmd.Bool([]string{"-internal"}, false, "restricts external access to the network")
|
| 53 |
+ flIPv6 := cmd.Bool([]string{"-ipv6"}, false, "enable IPv6 networking")
|
|
| 53 | 54 |
|
| 54 | 55 |
cmd.Require(flag.Exact, 1) |
| 55 | 56 |
err := cmd.ParseFlags(args, true) |
| ... | ... |
@@ -77,6 +78,7 @@ func (cli *DockerCli) CmdNetworkCreate(args ...string) error {
|
| 77 | 77 |
Options: flOpts.GetAll(), |
| 78 | 78 |
CheckDuplicate: true, |
| 79 | 79 |
Internal: *flInternal, |
| 80 |
+ EnableIPv6: *flIPv6, |
|
| 80 | 81 |
} |
| 81 | 82 |
|
| 82 | 83 |
resp, err := cli.client.NetworkCreate(nc) |
| ... | ... |
@@ -14,7 +14,7 @@ type Backend interface {
|
| 14 | 14 |
GetNetworkByName(idName string) (libnetwork.Network, error) |
| 15 | 15 |
GetNetworksByID(partialID string) []libnetwork.Network |
| 16 | 16 |
GetAllNetworks() []libnetwork.Network |
| 17 |
- CreateNetwork(name, driver string, ipam network.IPAM, options map[string]string, internal bool) (libnetwork.Network, error) |
|
| 17 |
+ CreateNetwork(name, driver string, ipam network.IPAM, options map[string]string, internal bool, enableIPv6 bool) (libnetwork.Network, error) |
|
| 18 | 18 |
ConnectContainerToNetwork(containerName, networkName string, endpointConfig *network.EndpointSettings) error |
| 19 | 19 |
DisconnectContainerFromNetwork(containerName string, network libnetwork.Network, force bool) error |
| 20 | 20 |
DeleteNetwork(name string) error |
| ... | ... |
@@ -91,7 +91,7 @@ func (n *networkRouter) postNetworkCreate(ctx context.Context, w http.ResponseWr |
| 91 | 91 |
warning = fmt.Sprintf("Network with name %s (id : %s) already exists", nw.Name(), nw.ID())
|
| 92 | 92 |
} |
| 93 | 93 |
|
| 94 |
- nw, err = n.backend.CreateNetwork(create.Name, create.Driver, create.IPAM, create.Options, create.Internal) |
|
| 94 |
+ nw, err = n.backend.CreateNetwork(create.Name, create.Driver, create.IPAM, create.Options, create.Internal, create.EnableIPv6) |
|
| 95 | 95 |
if err != nil {
|
| 96 | 96 |
return err |
| 97 | 97 |
} |
| ... | ... |
@@ -160,6 +160,8 @@ func buildNetworkResource(nw libnetwork.Network) *types.NetworkResource {
|
| 160 | 160 |
r.ID = nw.ID() |
| 161 | 161 |
r.Scope = nw.Info().Scope() |
| 162 | 162 |
r.Driver = nw.Type() |
| 163 |
+ r.EnableIPv6 = nw.Info().IPv6Enabled() |
|
| 164 |
+ r.Internal = nw.Info().Internal() |
|
| 163 | 165 |
r.Options = nw.Info().DriverOptions() |
| 164 | 166 |
r.Containers = make(map[string]types.EndpointResource) |
| 165 | 167 |
buildIpamResources(r, nw) |
| ... | ... |
@@ -1275,7 +1275,7 @@ _docker_network_connect() {
|
| 1275 | 1275 |
|
| 1276 | 1276 |
_docker_network_create() {
|
| 1277 | 1277 |
case "$prev" in |
| 1278 |
- --aux-address|--gateway|--ip-range|--ipam-opt|--opt|-o|--subnet) |
|
| 1278 |
+ --aux-address|--gateway|--internal|--ip-range|--ipam-opt|--ipv6|--opt|-o|--subnet) |
|
| 1279 | 1279 |
return |
| 1280 | 1280 |
;; |
| 1281 | 1281 |
--ipam-driver) |
| ... | ... |
@@ -1294,7 +1294,7 @@ _docker_network_create() {
|
| 1294 | 1294 |
|
| 1295 | 1295 |
case "$cur" in |
| 1296 | 1296 |
-*) |
| 1297 |
- COMPREPLY=( $( compgen -W "--aux-address --driver -d --gateway --help --internal --ip-range --ipam-driver --ipam-opt --opt -o --subnet" -- "$cur" ) ) |
|
| 1297 |
+ COMPREPLY=( $( compgen -W "--aux-address --driver -d --gateway --help --internal --ip-range --ipam-driver --ipam-opt --ipv6 --opt -o --subnet" -- "$cur" ) ) |
|
| 1298 | 1298 |
;; |
| 1299 | 1299 |
esac |
| 1300 | 1300 |
} |
| ... | ... |
@@ -332,6 +332,7 @@ __docker_network_subcommand() {
|
| 332 | 332 |
"($help)*--ip-range=[Allocate container ip from a sub-range]:IP/mask: " \ |
| 333 | 333 |
"($help)--ipam-driver=[IP Address Management Driver]:driver:(default)" \ |
| 334 | 334 |
"($help)*--ipam-opt=[Set custom IPAM plugin options]:opt=value: " \ |
| 335 |
+ "($help)--ipv6[Enable IPv6 networking]" \ |
|
| 335 | 336 |
"($help)*"{-o=,--opt=}"[Set driver specific options]:opt=value: " \
|
| 336 | 337 |
"($help)*--subnet=[Subnet in CIDR format that represents a network segment]:IP/mask: " \ |
| 337 | 338 |
"($help -)1:Network Name: " && ret=0 |
| ... | ... |
@@ -694,10 +694,8 @@ func initBridgeDriver(controller libnetwork.NetworkController, config *Config) e |
| 694 | 694 |
} |
| 695 | 695 |
// Initialize default network on "bridge" with the same name |
| 696 | 696 |
_, err = controller.NewNetwork("bridge", "bridge",
|
| 697 |
- libnetwork.NetworkOptionGeneric(options.Generic{
|
|
| 698 |
- netlabel.GenericData: netOption, |
|
| 699 |
- netlabel.EnableIPv6: config.bridgeConfig.EnableIPv6, |
|
| 700 |
- }), |
|
| 697 |
+ libnetwork.NetworkOptionEnableIPv6(config.bridgeConfig.EnableIPv6), |
|
| 698 |
+ libnetwork.NetworkOptionDriverOpts(netOption), |
|
| 701 | 699 |
libnetwork.NetworkOptionIpam("default", "", v4Conf, v6Conf, nil),
|
| 702 | 700 |
libnetwork.NetworkOptionDeferIPv6Alloc(deferIPv6Alloc)) |
| 703 | 701 |
if err != nil {
|
| ... | ... |
@@ -90,7 +90,7 @@ func (daemon *Daemon) GetAllNetworks() []libnetwork.Network {
|
| 90 | 90 |
} |
| 91 | 91 |
|
| 92 | 92 |
// CreateNetwork creates a network with the given name, driver and other optional parameters |
| 93 |
-func (daemon *Daemon) CreateNetwork(name, driver string, ipam network.IPAM, options map[string]string, internal bool) (libnetwork.Network, error) {
|
|
| 93 |
+func (daemon *Daemon) CreateNetwork(name, driver string, ipam network.IPAM, netOption map[string]string, internal bool, enableIPv6 bool) (libnetwork.Network, error) {
|
|
| 94 | 94 |
c := daemon.netController |
| 95 | 95 |
if driver == "" {
|
| 96 | 96 |
driver = c.Config().Daemon.DefaultDriver |
| ... | ... |
@@ -104,7 +104,8 @@ func (daemon *Daemon) CreateNetwork(name, driver string, ipam network.IPAM, opti |
| 104 | 104 |
} |
| 105 | 105 |
|
| 106 | 106 |
nwOptions = append(nwOptions, libnetwork.NetworkOptionIpam(ipam.Driver, "", v4Conf, v6Conf, ipam.Options)) |
| 107 |
- nwOptions = append(nwOptions, libnetwork.NetworkOptionDriverOpts(options)) |
|
| 107 |
+ nwOptions = append(nwOptions, libnetwork.NetworkOptionEnableIPv6(enableIPv6)) |
|
| 108 |
+ nwOptions = append(nwOptions, libnetwork.NetworkOptionDriverOpts(netOption)) |
|
| 108 | 109 |
if internal {
|
| 109 | 110 |
nwOptions = append(nwOptions, libnetwork.NetworkOptionInternalNetwork()) |
| 110 | 111 |
} |
| ... | ... |
@@ -22,6 +22,7 @@ parent = "smn_cli" |
| 22 | 22 |
--ip-range=[] Allocate container ip from a sub-range |
| 23 | 23 |
--ipam-driver=default IP Address Management Driver |
| 24 | 24 |
--ipam-opt=map[] Set custom IPAM driver specific options |
| 25 |
+ --ipv6 Enable IPv6 networking |
|
| 25 | 26 |
-o --opt=map[] Set custom driver specific options |
| 26 | 27 |
--subnet=[] Subnet in CIDR format that represents a network segment |
| 27 | 28 |
|
| ... | ... |
@@ -134,7 +135,13 @@ The following are those options and the equivalent docker daemon flags used for |
| 134 | 134 |
| `com.docker.network.bridge.enable_icc` | `--icc` | Enable or Disable Inter Container Connectivity | |
| 135 | 135 |
| `com.docker.network.bridge.host_binding_ipv4` | `--ip` | Default IP when binding container ports | |
| 136 | 136 |
| `com.docker.network.mtu` | `--mtu` | Set the containers network MTU | |
| 137 |
-| `com.docker.network.enable_ipv6` | `--ipv6` | Enable IPv6 networking | |
|
| 137 |
+ |
|
| 138 |
+The following arguments can be passed to `docker network create` for any network driver. |
|
| 139 |
+ |
|
| 140 |
+| Argument | Equivalent | Description | |
|
| 141 |
+|--------------|------------|------------------------------------------| |
|
| 142 |
+| `--internal` | - | Restricts external access to the network | |
|
| 143 |
+| `--ipv6` | `--ipv6` | Enable IPv6 networking | |
|
| 138 | 144 |
|
| 139 | 145 |
For example, let's use `-o` or `--opt` options to specify an IP address binding when publishing ports: |
| 140 | 146 |
|
| ... | ... |
@@ -111,7 +111,13 @@ The following are those options and the equivalent docker daemon flags used for |
| 111 | 111 |
| `com.docker.network.bridge.enable_icc` | `--icc` | Enable or Disable Inter Container Connectivity | |
| 112 | 112 |
| `com.docker.network.bridge.host_binding_ipv4` | `--ip` | Default IP when binding container ports | |
| 113 | 113 |
| `com.docker.network.mtu` | `--mtu` | Set the containers network MTU | |
| 114 |
-| `com.docker.network.enable_ipv6` | `--ipv6` | Enable IPv6 networking | |
|
| 114 |
+ |
|
| 115 |
+The following arguments can be passed to `docker network create` for any network driver. |
|
| 116 |
+ |
|
| 117 |
+| Argument | Equivalent | Description | |
|
| 118 |
+|--------------|------------|------------------------------------------| |
|
| 119 |
+| `--internal` | - | Restricts external access to the network | |
|
| 120 |
+| `--ipv6` | `--ipv6` | Enable IPv6 networking | |
|
| 115 | 121 |
|
| 116 | 122 |
For example, now let's use `-o` or `--opt` options to specify an IP address binding when publishing ports: |
| 117 | 123 |
|
| ... | ... |
@@ -84,6 +84,8 @@ func (s *DockerSuite) TestApiNetworkInspect(c *check.C) {
|
| 84 | 84 |
nr = getNetworkResource(c, nr.ID) |
| 85 | 85 |
c.Assert(nr.Driver, checker.Equals, "bridge") |
| 86 | 86 |
c.Assert(nr.Scope, checker.Equals, "local") |
| 87 |
+ c.Assert(nr.Internal, checker.Equals, false) |
|
| 88 |
+ c.Assert(nr.EnableIPv6, checker.Equals, false) |
|
| 87 | 89 |
c.Assert(nr.IPAM.Driver, checker.Equals, "default") |
| 88 | 90 |
c.Assert(len(nr.Containers), checker.Equals, 1) |
| 89 | 91 |
c.Assert(nr.Containers[containerID], checker.NotNil) |
| ... | ... |
@@ -574,18 +574,24 @@ func (s *DockerNetworkSuite) TestDockerNetworkInspectDefault(c *check.C) {
|
| 574 | 574 |
nr := getNetworkResource(c, "none") |
| 575 | 575 |
c.Assert(nr.Driver, checker.Equals, "null") |
| 576 | 576 |
c.Assert(nr.Scope, checker.Equals, "local") |
| 577 |
+ c.Assert(nr.Internal, checker.Equals, false) |
|
| 578 |
+ c.Assert(nr.EnableIPv6, checker.Equals, false) |
|
| 577 | 579 |
c.Assert(nr.IPAM.Driver, checker.Equals, "default") |
| 578 | 580 |
c.Assert(len(nr.IPAM.Config), checker.Equals, 0) |
| 579 | 581 |
|
| 580 | 582 |
nr = getNetworkResource(c, "host") |
| 581 | 583 |
c.Assert(nr.Driver, checker.Equals, "host") |
| 582 | 584 |
c.Assert(nr.Scope, checker.Equals, "local") |
| 585 |
+ c.Assert(nr.Internal, checker.Equals, false) |
|
| 586 |
+ c.Assert(nr.EnableIPv6, checker.Equals, false) |
|
| 583 | 587 |
c.Assert(nr.IPAM.Driver, checker.Equals, "default") |
| 584 | 588 |
c.Assert(len(nr.IPAM.Config), checker.Equals, 0) |
| 585 | 589 |
|
| 586 | 590 |
nr = getNetworkResource(c, "bridge") |
| 587 | 591 |
c.Assert(nr.Driver, checker.Equals, "bridge") |
| 588 | 592 |
c.Assert(nr.Scope, checker.Equals, "local") |
| 593 |
+ c.Assert(nr.Internal, checker.Equals, false) |
|
| 594 |
+ c.Assert(nr.EnableIPv6, checker.Equals, false) |
|
| 589 | 595 |
c.Assert(nr.IPAM.Driver, checker.Equals, "default") |
| 590 | 596 |
c.Assert(len(nr.IPAM.Config), checker.Equals, 1) |
| 591 | 597 |
c.Assert(nr.IPAM.Config[0].Subnet, checker.NotNil) |
| ... | ... |
@@ -600,6 +606,8 @@ func (s *DockerNetworkSuite) TestDockerNetworkInspectCustomUnspecified(c *check. |
| 600 | 600 |
nr := getNetworkResource(c, "test01") |
| 601 | 601 |
c.Assert(nr.Driver, checker.Equals, "bridge") |
| 602 | 602 |
c.Assert(nr.Scope, checker.Equals, "local") |
| 603 |
+ c.Assert(nr.Internal, checker.Equals, false) |
|
| 604 |
+ c.Assert(nr.EnableIPv6, checker.Equals, false) |
|
| 603 | 605 |
c.Assert(nr.IPAM.Driver, checker.Equals, "default") |
| 604 | 606 |
c.Assert(len(nr.IPAM.Config), checker.Equals, 1) |
| 605 | 607 |
c.Assert(nr.IPAM.Config[0].Subnet, checker.NotNil) |
| ... | ... |
@@ -610,12 +618,14 @@ func (s *DockerNetworkSuite) TestDockerNetworkInspectCustomUnspecified(c *check. |
| 610 | 610 |
} |
| 611 | 611 |
|
| 612 | 612 |
func (s *DockerNetworkSuite) TestDockerNetworkInspectCustomSpecified(c *check.C) {
|
| 613 |
- 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") |
|
| 613 |
+ 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") |
|
| 614 | 614 |
assertNwIsAvailable(c, "br0") |
| 615 | 615 |
|
| 616 | 616 |
nr := getNetworkResource(c, "br0") |
| 617 | 617 |
c.Assert(nr.Driver, checker.Equals, "bridge") |
| 618 | 618 |
c.Assert(nr.Scope, checker.Equals, "local") |
| 619 |
+ c.Assert(nr.Internal, checker.Equals, false) |
|
| 620 |
+ c.Assert(nr.EnableIPv6, checker.Equals, true) |
|
| 619 | 621 |
c.Assert(nr.IPAM.Driver, checker.Equals, "default") |
| 620 | 622 |
c.Assert(len(nr.IPAM.Config), checker.Equals, 1) |
| 621 | 623 |
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) {
|
| 297 | 297 |
func (s *DockerSuite) TestPortBindingOnSandbox(c *check.C) {
|
| 298 | 298 |
testRequires(c, DaemonIsLinux, NotUserNamespace) |
| 299 | 299 |
dockerCmd(c, "network", "create", "--internal", "-d", "bridge", "internal-net") |
| 300 |
+ nr := getNetworkResource(c, "internal-net") |
|
| 301 |
+ c.Assert(nr.Internal, checker.Equals, true) |
|
| 302 |
+ |
|
| 300 | 303 |
dockerCmd(c, "run", "--net", "internal-net", "-d", "--name", "c1", |
| 301 | 304 |
"-p", "8080:8080", "busybox", "nc", "-l", "-p", "8080") |
| 302 | 305 |
c.Assert(waitRun("c1"), check.IsNil)
|
| ... | ... |
@@ -14,6 +14,7 @@ docker-network-create - create a new network |
| 14 | 14 |
[**--ip-range**=*[]*] |
| 15 | 15 |
[**--ipam-driver**=*default*] |
| 16 | 16 |
[**--ipam-opt**=*map[]*] |
| 17 |
+[**--ipv6**] |
|
| 17 | 18 |
[**-o**|**--opt**=*map[]*] |
| 18 | 19 |
[**--subnet**=*[]*] |
| 19 | 20 |
NETWORK-NAME |
| ... | ... |
@@ -152,6 +153,9 @@ If you want to create an externally isolated `overlay` network, you can specify |
| 152 | 152 |
**--ipam-opt**=map[] |
| 153 | 153 |
Set custom IPAM driver options |
| 154 | 154 |
|
| 155 |
+**--ipv6** |
|
| 156 |
+ Enable IPv6 networking |
|
| 157 |
+ |
|
| 155 | 158 |
**-o**, **--opt**=map[] |
| 156 | 159 |
Set custom driver options |
| 157 | 160 |
|