summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Goff <cpuguy83@gmail.com>2023-04-25 11:07:57 -0700
committerGitHub <noreply@github.com>2023-04-25 11:07:57 -0700
commit0970cb054c9606c727dda5240750482d0f40f729 (patch)
treecc5632179c73ba70b346181eb9b13ff1a708aabf
parent801202349ab04a329c32da5612f230689c54eb91 (diff)
parent2d31697d82df61ab78b583818f4106c36cf20cec (diff)
downloaddocker-0970cb054c9606c727dda5240750482d0f40f729.tar.gz
Merge pull request #45366 from akerouanton/fix-docker0-PreferredPool
daemon: set docker0 subpool as the IPAM pool
-rw-r--r--daemon/daemon_unix.go3
-rw-r--r--integration/daemon/daemon_test.go28
-rw-r--r--libnetwork/drivers/bridge/setup_device.go10
3 files changed, 39 insertions, 2 deletions
diff --git a/daemon/daemon_unix.go b/daemon/daemon_unix.go
index 2d32d19a8e..3a1e46add7 100644
--- a/daemon/daemon_unix.go
+++ b/daemon/daemon_unix.go
@@ -997,6 +997,9 @@ func initBridgeDriver(controller *libnetwork.Controller, config *config.Config)
}
ipamV4Conf.SubPool = fCIDR.String()
+ if ipamV4Conf.PreferredPool == "" {
+ ipamV4Conf.PreferredPool = fCIDR.String()
+ }
}
if config.BridgeConfig.DefaultGatewayIPv4 != nil {
diff --git a/integration/daemon/daemon_test.go b/integration/daemon/daemon_test.go
index 2242d3d4f1..7ecb2c0aa4 100644
--- a/integration/daemon/daemon_test.go
+++ b/integration/daemon/daemon_test.go
@@ -21,6 +21,7 @@ import (
"github.com/docker/docker/testutil/daemon"
"gotest.tools/v3/assert"
is "gotest.tools/v3/assert/cmp"
+ "gotest.tools/v3/icmd"
"gotest.tools/v3/skip"
)
@@ -400,3 +401,30 @@ func testLiveRestoreVolumeReferences(t *testing.T) {
runTest(t, "no")
})
}
+
+func TestDaemonDefaultBridgeWithFixedCidrButNoBip(t *testing.T) {
+ skip.If(t, runtime.GOOS == "windows")
+
+ bridgeName := "ext-bridge1"
+ d := daemon.New(t, daemon.WithEnvVars("DOCKER_TEST_CREATE_DEFAULT_BRIDGE="+bridgeName))
+ defer func() {
+ d.Stop(t)
+ d.Cleanup(t)
+ }()
+
+ defer func() {
+ // No need to clean up when running this test in rootless mode, as the
+ // interface is deleted when the daemon is stopped and the netns
+ // reclaimed by the kernel.
+ if !testEnv.IsRootless() {
+ deleteInterface(t, bridgeName)
+ }
+ }()
+ d.StartWithBusybox(t, "--bridge", bridgeName, "--fixed-cidr", "192.168.130.0/24")
+}
+
+func deleteInterface(t *testing.T, ifName string) {
+ icmd.RunCommand("ip", "link", "delete", ifName).Assert(t, icmd.Success)
+ icmd.RunCommand("iptables", "-t", "nat", "--flush").Assert(t, icmd.Success)
+ icmd.RunCommand("iptables", "--flush").Assert(t, icmd.Success)
+}
diff --git a/libnetwork/drivers/bridge/setup_device.go b/libnetwork/drivers/bridge/setup_device.go
index 73d8647b0e..974115603b 100644
--- a/libnetwork/drivers/bridge/setup_device.go
+++ b/libnetwork/drivers/bridge/setup_device.go
@@ -16,8 +16,14 @@ import (
// SetupDevice create a new bridge interface/
func setupDevice(config *networkConfiguration, i *bridgeInterface) error {
// We only attempt to create the bridge when the requested device name is
- // the default one.
- if config.BridgeName != DefaultBridgeName && config.DefaultBridge {
+ // the default one. The default bridge name can be overridden with the
+ // DOCKER_TEST_CREATE_DEFAULT_BRIDGE env var. It should be used only for
+ // test purpose.
+ var defaultBridgeName string
+ if defaultBridgeName = os.Getenv("DOCKER_TEST_CREATE_DEFAULT_BRIDGE"); defaultBridgeName == "" {
+ defaultBridgeName = DefaultBridgeName
+ }
+ if config.BridgeName != defaultBridgeName && config.DefaultBridge {
return NonDefaultBridgeExistError(config.BridgeName)
}