Use Node IP in Swarm Standalone with "host" NetworkMode
This commit is contained in:
parent
7c4353a0ac
commit
d1d8b01dfb
3 changed files with 29 additions and 2 deletions
|
@ -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) {
|
func labels(labels map[string]string) func(*docker.ContainerJSON) {
|
||||||
return func(c *docker.ContainerJSON) {
|
return func(c *docker.ContainerJSON) {
|
||||||
c.Config.Labels = labels
|
c.Config.Labels = labels
|
||||||
|
|
|
@ -63,6 +63,7 @@ type dockerData struct {
|
||||||
Labels map[string]string // List of labels set to container or service
|
Labels map[string]string // List of labels set to container or service
|
||||||
NetworkSettings networkSettings
|
NetworkSettings networkSettings
|
||||||
Health string
|
Health string
|
||||||
|
Node *dockertypes.ContainerNode
|
||||||
}
|
}
|
||||||
|
|
||||||
// NetworkSettings holds the networks data to the Provider p
|
// 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 "host" == container.NetworkSettings.NetworkMode {
|
||||||
|
if container.Node != nil {
|
||||||
|
if container.Node.IPAddress != "" {
|
||||||
|
return container.Node.IPAddress
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return "127.0.0.1"
|
return "127.0.0.1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -823,6 +828,7 @@ func parseContainer(container dockertypes.ContainerJSON) dockerData {
|
||||||
if container.ContainerJSONBase != nil {
|
if container.ContainerJSONBase != nil {
|
||||||
dockerData.Name = container.ContainerJSONBase.Name
|
dockerData.Name = container.ContainerJSONBase.Name
|
||||||
dockerData.ServiceName = dockerData.Name //Default ServiceName to be the container's Name.
|
dockerData.ServiceName = dockerData.Name //Default ServiceName to be the container's Name.
|
||||||
|
dockerData.Node = container.ContainerJSONBase.Node
|
||||||
|
|
||||||
if container.ContainerJSONBase.HostConfig != nil {
|
if container.ContainerJSONBase.HostConfig != nil {
|
||||||
dockerData.NetworkSettings.NetworkMode = container.ContainerJSONBase.HostConfig.NetworkMode
|
dockerData.NetworkSettings.NetworkMode = container.ContainerJSONBase.HostConfig.NetworkMode
|
||||||
|
|
|
@ -198,6 +198,19 @@ func TestDockerGetIPAddress(t *testing.T) {
|
||||||
),
|
),
|
||||||
expected: "127.0.0.1",
|
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 {
|
for containerID, e := range containers {
|
||||||
|
|
Loading…
Reference in a new issue