From 387fa74070d907c9b068e48f769328dc7df639d8 Mon Sep 17 00:00:00 2001 From: Linus Karlsson Date: Tue, 28 Mar 2023 11:54:51 +0200 Subject: [PATCH] Add IPv6 support for Docker Hub --- README.md | 1 + internal/collector/collector.go | 12 ++++++++++-- internal/vars/envars.go | 1 + 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bf4681f..45ad6de 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,7 @@ make docker | DOCKERHUB_REPO_IMAGE | ratelimitpreview/test | custom repository/image | | ENABLE_FILE_AUTH | false | Load auth credentials from docker config file
at /$FILE_AUTH_DIR/config.json
Must leave auth through ENV empty. | | FILE_AUTH_DIR | /config | Directory where config.json resides | +| ENABLE_IPV6 | false | Use IPv6 instead of IPv4 when fetching rate limits |
Example docker configuration config.json file below.
diff --git a/internal/collector/collector.go b/internal/collector/collector.go index 10caf17..9c7410e 100644 --- a/internal/collector/collector.go +++ b/internal/collector/collector.go @@ -29,9 +29,17 @@ var DockerLabels = make(map[string]string, 1) // GetMetrics will save metrics in a float64 map func GetMetrics() { l := log.New(os.Stdout, "drl-exporter ", log.LstdFlags) - tokenUrl := "https://auth.docker.io/token?service=" + + + tokenBaseUrl := "https://auth.docker.io" + repoBaseUrl := "https://registry-1.docker.io" + if *vars.EnableIPv6 { + tokenBaseUrl = "https://auth.ipv6.docker.com" + repoBaseUrl = "https://registry.ipv6.docker.com" + } + + tokenUrl := tokenBaseUrl + "/token?service=" + "registry.docker.io&scope=repository:" + *vars.DockerRepoImage + ":pull" - repoUrl := "https://registry-1.docker.io/v2/" + + repoUrl := repoBaseUrl + "/v2/" + "registry.docker.io&scope=repository:" + *vars.DockerRepoImage + "/manifests/latest" tr, err := tokenRequest(tokenUrl) diff --git a/internal/vars/envars.go b/internal/vars/envars.go index 05b0671..e917bb3 100644 --- a/internal/vars/envars.go +++ b/internal/vars/envars.go @@ -12,4 +12,5 @@ var ( EnableUserAuth = env.Bool("ENABLE_USER_AUTH", false, false, "Enable metrics for users") EnableFileAuth = env.Bool("ENABLE_FILE_AUTH", false, false, "Enable authentication through docker configuration file 'config.json'") FileAuthDir = env.String("FILE_AUTH_DIR", false, "/config", "Directory to load 'config.json' docker configuration from") + EnableIPv6 = env.Bool("ENABLE_IPV6", false, false, "Use IPv6 instead of IPv4") )