diff --git a/daemon/container_operations_unix.go b/daemon/container_operations_unix.go index f4f8907c8e..5c048d1281 100644 --- a/daemon/container_operations_unix.go +++ b/daemon/container_operations_unix.go @@ -129,6 +129,11 @@ func (daemon *Daemon) DisconnectFromNetwork(container *container.Container, netw if container.RemovalInProgress || container.Dead { return errRemovalContainer(container.ID) } + // In case networkName is resolved we will use n.Name() + // this will cover the case where network id is passed. + if n != nil { + networkName = n.Name() + } if _, ok := container.NetworkSettings.Networks[networkName]; !ok { return fmt.Errorf("container %s is not connected to the network %s", container.ID, networkName) } diff --git a/integration-cli/docker_cli_network_unix_test.go b/integration-cli/docker_cli_network_unix_test.go index 3447b19a7c..7797ee57ad 100644 --- a/integration-cli/docker_cli_network_unix_test.go +++ b/integration-cli/docker_cli_network_unix_test.go @@ -1756,3 +1756,16 @@ func (s *DockerNetworkSuite) TestDockerNetworkValidateIP(c *check.C) { _, _, err = dockerCmdWithError("run", "--net=mynet", "--ip6", "::ffff:172.28.99.99", "busybox", "top") c.Assert(err.Error(), checker.Contains, "invalid IPv6 address") } + +// Test case for 26220 +func (s *DockerNetworkSuite) TestDockerNetworkDisconnectFromBridge(c *check.C) { + out, _ := dockerCmd(c, "network", "inspect", "--format", "{{.Id}}", "bridge") + + network := strings.TrimSpace(out) + + name := "test" + dockerCmd(c, "create", "--rm", "--name", name, "busybox", "top") + + _, _, err := dockerCmdWithError("network", "disconnect", network, name) + c.Assert(err, check.IsNil) +}