diff --git a/daemon/container_operations.go b/daemon/container_operations.go index 2d4531f150..658ca78649 100644 --- a/daemon/container_operations.go +++ b/daemon/container_operations.go @@ -732,10 +732,10 @@ func (daemon *Daemon) releaseNetwork(container *container.Container) { logrus.Errorf("Error deleting sandbox id %s for container %s: %v", sid, container.ID, err) } - attributes := map[string]string{ - "container": container.ID, - } for _, nw := range networks { + attributes := map[string]string{ + "container": container.ID, + } daemon.LogNetworkEventWithAttributes(nw, "disconnect", attributes) } } diff --git a/integration-cli/docker_cli_events_unix_test.go b/integration-cli/docker_cli_events_unix_test.go index 49c7533a4b..3417d7abf6 100644 --- a/integration-cli/docker_cli_events_unix_test.go +++ b/integration-cli/docker_cli_events_unix_test.go @@ -226,6 +226,32 @@ func (s *DockerSuite) TestNetworkEvents(c *check.C) { c.Assert(netEvents[3], checker.Equals, "destroy") } +func (s *DockerSuite) TestEventsContainerWithMultiNetwork(c *check.C) { + testRequires(c, DaemonIsLinux) + + // Observe create/connect network actions + dockerCmd(c, "network", "create", "test-event-network-local-1") + dockerCmd(c, "network", "create", "test-event-network-local-2") + dockerCmd(c, "run", "--name", "test-network-container", "--net", "test-event-network-local-1", "-td", "busybox", "sh") + waitRun("test-network-container") + dockerCmd(c, "network", "connect", "test-event-network-local-2", "test-network-container") + + since := daemonUnixTime(c) + + dockerCmd(c, "stop", "-t", "1", "test-network-container") + + until := daemonUnixTime(c) + out, _ := dockerCmd(c, "events", "--since", since, "--until", until, "-f", "type=network") + netEvents := strings.Split(strings.TrimSpace(out), "\n") + + c.Assert(len(netEvents), checker.Equals, 2) + c.Assert(netEvents[0], checker.Contains, "disconnect") + c.Assert(netEvents[0], checker.Contains, "test-event-network-local-1") + + c.Assert(netEvents[1], checker.Contains, "disconnect") + c.Assert(netEvents[1], checker.Contains, "test-event-network-local-2") +} + func (s *DockerSuite) TestEventsStreaming(c *check.C) { testRequires(c, DaemonIsLinux)