This was added before the libnetwork merge, and then lost. Fixes #13755.
Signed-off-by: Eric-Olivier Lamey <eo@lamey.me>
| ... | ... |
@@ -42,8 +42,8 @@ type bridgeConfig struct {
|
| 42 | 42 |
IP string |
| 43 | 43 |
FixedCIDR string |
| 44 | 44 |
FixedCIDRv6 string |
| 45 |
- DefaultGatewayIPv4 string |
|
| 46 |
- DefaultGatewayIPv6 string |
|
| 45 |
+ DefaultGatewayIPv4 net.IP |
|
| 46 |
+ DefaultGatewayIPv6 net.IP |
|
| 47 | 47 |
InterContainerCommunication bool |
| 48 | 48 |
} |
| 49 | 49 |
|
| ... | ... |
@@ -68,8 +68,8 @@ func (config *Config) InstallFlags() {
|
| 68 | 68 |
flag.StringVar(&config.Bridge.Iface, []string{"b", "-bridge"}, "", "Attach containers to a network bridge")
|
| 69 | 69 |
flag.StringVar(&config.Bridge.FixedCIDR, []string{"-fixed-cidr"}, "", "IPv4 subnet for fixed IPs")
|
| 70 | 70 |
flag.StringVar(&config.Bridge.FixedCIDRv6, []string{"-fixed-cidr-v6"}, "", "IPv6 subnet for fixed IPs")
|
| 71 |
- flag.StringVar(&config.Bridge.DefaultGatewayIPv4, []string{"-default-gateway"}, "", "Container default gateway IPv4 address")
|
|
| 72 |
- flag.StringVar(&config.Bridge.DefaultGatewayIPv6, []string{"-default-gateway-v6"}, "", "Container default gateway IPv6 address")
|
|
| 71 |
+ opts.IPVar(&config.Bridge.DefaultGatewayIPv4, []string{"-default-gateway"}, "", "Container default gateway IPv4 address")
|
|
| 72 |
+ opts.IPVar(&config.Bridge.DefaultGatewayIPv6, []string{"-default-gateway-v6"}, "", "Container default gateway IPv6 address")
|
|
| 73 | 73 |
flag.BoolVar(&config.Bridge.InterContainerCommunication, []string{"#icc", "-icc"}, true, "Enable inter-container communication")
|
| 74 | 74 |
opts.IPVar(&config.Bridge.DefaultIP, []string{"#ip", "-ip"}, "0.0.0.0", "Default IP when binding container ports")
|
| 75 | 75 |
flag.BoolVar(&config.Bridge.EnableUserlandProxy, []string{"-userland-proxy"}, true, "Use userland proxy for loopback traffic")
|
| ... | ... |
@@ -946,6 +946,14 @@ func initNetworkController(config *Config) (libnetwork.NetworkController, error) |
| 946 | 946 |
netOption["FixedCIDRv6"] = fCIDRv6 |
| 947 | 947 |
} |
| 948 | 948 |
|
| 949 |
+ if config.Bridge.DefaultGatewayIPv4 != nil {
|
|
| 950 |
+ netOption["DefaultGatewayIPv4"] = config.Bridge.DefaultGatewayIPv4 |
|
| 951 |
+ } |
|
| 952 |
+ |
|
| 953 |
+ if config.Bridge.DefaultGatewayIPv6 != nil {
|
|
| 954 |
+ netOption["DefaultGatewayIPv6"] = config.Bridge.DefaultGatewayIPv6 |
|
| 955 |
+ } |
|
| 956 |
+ |
|
| 949 | 957 |
// --ip processing |
| 950 | 958 |
if config.Bridge.DefaultIP != nil {
|
| 951 | 959 |
netOption["DefaultBindingIP"] = config.Bridge.DefaultIP |
| ... | ... |
@@ -526,6 +526,49 @@ func (s *DockerDaemonSuite) TestDaemonBridgeFixedCidr(c *check.C) {
|
| 526 | 526 |
} |
| 527 | 527 |
} |
| 528 | 528 |
|
| 529 |
+func (s *DockerDaemonSuite) TestDaemonDefaultGatewayIPv4Implicit(c *check.C) {
|
|
| 530 |
+ defaultNetworkBridge := "docker0" |
|
| 531 |
+ deleteInterface(c, defaultNetworkBridge) |
|
| 532 |
+ |
|
| 533 |
+ d := s.d |
|
| 534 |
+ |
|
| 535 |
+ bridgeIp := "192.169.1.1" |
|
| 536 |
+ bridgeIpNet := fmt.Sprintf("%s/24", bridgeIp)
|
|
| 537 |
+ |
|
| 538 |
+ err := d.StartWithBusybox("--bip", bridgeIpNet)
|
|
| 539 |
+ c.Assert(err, check.IsNil) |
|
| 540 |
+ defer d.Restart() |
|
| 541 |
+ |
|
| 542 |
+ expectedMessage := fmt.Sprintf("default via %s dev", bridgeIp)
|
|
| 543 |
+ out, err := d.Cmd("run", "busybox", "ip", "-4", "route", "list", "0/0")
|
|
| 544 |
+ c.Assert(strings.Contains(out, expectedMessage), check.Equals, true, |
|
| 545 |
+ check.Commentf("Implicit default gateway should be bridge IP %s, but default route was '%s'",
|
|
| 546 |
+ bridgeIp, strings.TrimSpace(out))) |
|
| 547 |
+ deleteInterface(c, defaultNetworkBridge) |
|
| 548 |
+} |
|
| 549 |
+ |
|
| 550 |
+func (s *DockerDaemonSuite) TestDaemonDefaultGatewayIPv4Explicit(c *check.C) {
|
|
| 551 |
+ defaultNetworkBridge := "docker0" |
|
| 552 |
+ deleteInterface(c, defaultNetworkBridge) |
|
| 553 |
+ |
|
| 554 |
+ d := s.d |
|
| 555 |
+ |
|
| 556 |
+ bridgeIp := "192.169.1.1" |
|
| 557 |
+ bridgeIpNet := fmt.Sprintf("%s/24", bridgeIp)
|
|
| 558 |
+ gatewayIp := "192.169.1.254" |
|
| 559 |
+ |
|
| 560 |
+ err := d.StartWithBusybox("--bip", bridgeIpNet, "--default-gateway", gatewayIp)
|
|
| 561 |
+ c.Assert(err, check.IsNil) |
|
| 562 |
+ defer d.Restart() |
|
| 563 |
+ |
|
| 564 |
+ expectedMessage := fmt.Sprintf("default via %s dev", gatewayIp)
|
|
| 565 |
+ out, err := d.Cmd("run", "busybox", "ip", "-4", "route", "list", "0/0")
|
|
| 566 |
+ c.Assert(strings.Contains(out, expectedMessage), check.Equals, true, |
|
| 567 |
+ check.Commentf("Explicit default gateway should be %s, but default route was '%s'",
|
|
| 568 |
+ gatewayIp, strings.TrimSpace(out))) |
|
| 569 |
+ deleteInterface(c, defaultNetworkBridge) |
|
| 570 |
+} |
|
| 571 |
+ |
|
| 529 | 572 |
func (s *DockerDaemonSuite) TestDaemonIP(c *check.C) {
|
| 530 | 573 |
d := s.d |
| 531 | 574 |
|