Use IPv6 address

This commit is contained in:
Tom Moulard 2022-09-08 11:20:09 +02:00 committed by GitHub
parent c84378d649
commit 52df1d63fe
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 35 additions and 1 deletions

View file

@ -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
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
Traefik requires access to the docker socket to get its dynamic configuration.

View file

@ -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 {
task := &swarm.Task{
ID: id,

View file

@ -3511,6 +3511,22 @@ func TestDockerGetIPAddress(t *testing.T) {
network: "testnet",
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",
container: containerJSON(

View file

@ -411,10 +411,15 @@ func parseContainer(container dockertypes.ContainerJSON) dockerData {
if container.NetworkSettings.Networks != nil {
dData.NetworkSettings.Networks = make(map[string]*networkData)
for name, containerNetwork := range container.NetworkSettings.Networks {
addr := containerNetwork.IPAddress
if addr == "" {
addr = containerNetwork.GlobalIPv6Address
}
dData.NetworkSettings.Networks[name] = &networkData{
ID: containerNetwork.NetworkID,
Name: name,
Addr: containerNetwork.IPAddress,
Addr: addr,
}
}
}