Use IPv6 address
This commit is contained in:
parent
c84378d649
commit
52df1d63fe
4 changed files with 35 additions and 1 deletions
|
@ -140,6 +140,13 @@ On Linux, for versions of Docker older than 20.10.0, for `host.docker.internal`
|
||||||
as an `extra_host` to the Traefik container, using the `--add-host` flag. For example, to set it to the IP address of
|
as an `extra_host` to the Traefik container, using the `--add-host` flag. For example, to set it to the IP address of
|
||||||
the bridge interface (`docker0` by default): `--add-host=host.docker.internal:172.17.0.1`
|
the bridge interface (`docker0` by default): `--add-host=host.docker.internal:172.17.0.1`
|
||||||
|
|
||||||
|
### IPv4 && IPv6
|
||||||
|
|
||||||
|
When using a docker stack that uses IPv6,
|
||||||
|
Traefik will use the IPv4 container IP before its IPv6 counterpart.
|
||||||
|
Therefore, on an IPv6 Docker stack,
|
||||||
|
Traefik will use the IPv6 container IP.
|
||||||
|
|
||||||
### Docker API Access
|
### Docker API Access
|
||||||
|
|
||||||
Traefik requires access to the docker socket to get its dynamic configuration.
|
Traefik requires access to the docker socket to get its dynamic configuration.
|
||||||
|
|
|
@ -77,6 +77,12 @@ func ipv4(ip string) func(*network.EndpointSettings) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ipv6(ip string) func(*network.EndpointSettings) {
|
||||||
|
return func(s *network.EndpointSettings) {
|
||||||
|
s.GlobalIPv6Address = ip
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func swarmTask(id string, ops ...func(*swarm.Task)) swarm.Task {
|
func swarmTask(id string, ops ...func(*swarm.Task)) swarm.Task {
|
||||||
task := &swarm.Task{
|
task := &swarm.Task{
|
||||||
ID: id,
|
ID: id,
|
||||||
|
|
|
@ -3511,6 +3511,22 @@ func TestDockerGetIPAddress(t *testing.T) {
|
||||||
network: "testnet",
|
network: "testnet",
|
||||||
expected: "10.11.12.13",
|
expected: "10.11.12.13",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
desc: "one ipv6 network, network label",
|
||||||
|
container: containerJSON(
|
||||||
|
withNetwork("testnet", ipv6("fd00:1:2:3:4::")),
|
||||||
|
),
|
||||||
|
network: "testnet",
|
||||||
|
expected: "fd00:1:2:3:4::",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "two network ipv4 + ipv6, network label",
|
||||||
|
container: containerJSON(
|
||||||
|
withNetwork("testnet", ipv4("10.11.12.13"), ipv6("fd00:1:2:3:4::")),
|
||||||
|
),
|
||||||
|
network: "testnet",
|
||||||
|
expected: "10.11.12.13",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
desc: "two networks, network label",
|
desc: "two networks, network label",
|
||||||
container: containerJSON(
|
container: containerJSON(
|
||||||
|
|
|
@ -411,10 +411,15 @@ func parseContainer(container dockertypes.ContainerJSON) dockerData {
|
||||||
if container.NetworkSettings.Networks != nil {
|
if container.NetworkSettings.Networks != nil {
|
||||||
dData.NetworkSettings.Networks = make(map[string]*networkData)
|
dData.NetworkSettings.Networks = make(map[string]*networkData)
|
||||||
for name, containerNetwork := range container.NetworkSettings.Networks {
|
for name, containerNetwork := range container.NetworkSettings.Networks {
|
||||||
|
addr := containerNetwork.IPAddress
|
||||||
|
if addr == "" {
|
||||||
|
addr = containerNetwork.GlobalIPv6Address
|
||||||
|
}
|
||||||
|
|
||||||
dData.NetworkSettings.Networks[name] = &networkData{
|
dData.NetworkSettings.Networks[name] = &networkData{
|
||||||
ID: containerNetwork.NetworkID,
|
ID: containerNetwork.NetworkID,
|
||||||
Name: name,
|
Name: name,
|
||||||
Addr: containerNetwork.IPAddress,
|
Addr: addr,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue