diff --git a/provider/docker/builder_test.go b/provider/docker/builder_test.go index 270c25c7a..7e8a4ba5d 100644 --- a/provider/docker/builder_test.go +++ b/provider/docker/builder_test.go @@ -39,6 +39,14 @@ func networkMode(mode string) func(*docker.ContainerJSON) { } } +func nodeIP(ip string) func(*docker.ContainerJSON) { + return func(c *docker.ContainerJSON) { + c.ContainerJSONBase.Node = &docker.ContainerNode{ + IPAddress: ip, + } + } +} + func labels(labels map[string]string) func(*docker.ContainerJSON) { return func(c *docker.ContainerJSON) { c.Config.Labels = labels diff --git a/provider/docker/docker.go b/provider/docker/docker.go index fda093243..d3f9e2e73 100644 --- a/provider/docker/docker.go +++ b/provider/docker/docker.go @@ -63,6 +63,7 @@ type dockerData struct { Labels map[string]string // List of labels set to container or service NetworkSettings networkSettings Health string + Node *dockertypes.ContainerNode } // NetworkSettings holds the networks data to the Provider p @@ -596,9 +597,13 @@ func (p *Provider) getIPAddress(container dockerData) string { } } - // If net==host, quick n' dirty, we return 127.0.0.1 - // This will work locally, but will fail with swarm. if "host" == container.NetworkSettings.NetworkMode { + if container.Node != nil { + if container.Node.IPAddress != "" { + return container.Node.IPAddress + } + } + return "127.0.0.1" } @@ -823,6 +828,7 @@ func parseContainer(container dockertypes.ContainerJSON) dockerData { if container.ContainerJSONBase != nil { dockerData.Name = container.ContainerJSONBase.Name dockerData.ServiceName = dockerData.Name //Default ServiceName to be the container's Name. + dockerData.Node = container.ContainerJSONBase.Node if container.ContainerJSONBase.HostConfig != nil { dockerData.NetworkSettings.NetworkMode = container.ContainerJSONBase.HostConfig.NetworkMode diff --git a/provider/docker/docker_test.go b/provider/docker/docker_test.go index 718890e3e..c760bdcf9 100644 --- a/provider/docker/docker_test.go +++ b/provider/docker/docker_test.go @@ -198,6 +198,19 @@ func TestDockerGetIPAddress(t *testing.T) { ), expected: "127.0.0.1", }, + { + container: containerJSON( + networkMode("host"), + ), + expected: "127.0.0.1", + }, + { + container: containerJSON( + networkMode("host"), + nodeIP("10.0.0.5"), + ), + expected: "10.0.0.5", + }, } for containerID, e := range containers {