From e0d2383a420b452ea8472403541ac1088ae55e80 Mon Sep 17 00:00:00 2001 From: Nicolas Duchon Date: Wed, 1 Oct 2025 07:46:06 +0200 Subject: [PATCH 1/3] feat: container filters environment variable --- README.md | 2 ++ cmd/docker-gen/main.go | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/README.md b/README.md index 6f6b6826..c5931091 100644 --- a/README.md +++ b/README.md @@ -156,6 +156,8 @@ Environment Variables: DOCKER_HOST - default value for -endpoint DOCKER_CERT_PATH - directory path containing key.pem, cert.pem and ca.pem DOCKER_TLS_VERIFY - enable client TLS verification + DOCKER_CONTAINER_FILTERS - comma separated list of container filters for inclusion by docker-gen. + Filters supplied through this variable override filters supplied through the -container-filter options. ``` If no `` file is specified, the output is sent to stdout. Mainly useful for debugging. diff --git a/cmd/docker-gen/main.go b/cmd/docker-gen/main.go index a6372ef4..6121c268 100644 --- a/cmd/docker-gen/main.go +++ b/cmd/docker-gen/main.go @@ -86,6 +86,8 @@ Environment Variables: DOCKER_HOST - default value for -endpoint DOCKER_CERT_PATH - directory path containing key.pem, cert.pem and ca.pem DOCKER_TLS_VERIFY - enable client TLS verification + DOCKER_CONTAINER_FILTERS - comma separated list of container filters for inclusion by docker-gen. + Filters supplied through this variable override filters supplied through the -container-filter options. `) println(`For more information, see https://github.com/nginx-proxy/docker-gen`) } @@ -121,6 +123,13 @@ func initFlags() { "include stopped containers. Bypassed when providing a container status filter (-container-filter status=foo).") flag.Var(&containerFilter, "container-filter", "container filter for inclusion by docker-gen. You can pass this option multiple times to combine filters with AND. https://docs.docker.com/engine/reference/commandline/ps/#filter") + // override containerFilter with DOCKER_CONTAINER_FILTERS environment variable + if filters := strings.Split(os.Getenv("DOCKER_CONTAINER_FILTERS"), ","); len(filters) > 0 && filters[0] != "" { + containerFilter = make(mapstringslice) + for _, filter := range filters { + containerFilter.Set(filter) + } + } // Command notification options flag.StringVar(¬ifyCmd, "notify", "", "run command after template is regenerated (e.g `restart xyz`)") From 615f63aab489d2f31bbdc1fe8410cd1f2084934d Mon Sep 17 00:00:00 2001 From: Nicolas Duchon Date: Thu, 2 Oct 2025 06:56:06 +0200 Subject: [PATCH 2/3] refactor: handle blank container filters env var --- cmd/docker-gen/main.go | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/cmd/docker-gen/main.go b/cmd/docker-gen/main.go index 6121c268..1412cdd9 100644 --- a/cmd/docker-gen/main.go +++ b/cmd/docker-gen/main.go @@ -123,13 +123,6 @@ func initFlags() { "include stopped containers. Bypassed when providing a container status filter (-container-filter status=foo).") flag.Var(&containerFilter, "container-filter", "container filter for inclusion by docker-gen. You can pass this option multiple times to combine filters with AND. https://docs.docker.com/engine/reference/commandline/ps/#filter") - // override containerFilter with DOCKER_CONTAINER_FILTERS environment variable - if filters := strings.Split(os.Getenv("DOCKER_CONTAINER_FILTERS"), ","); len(filters) > 0 && filters[0] != "" { - containerFilter = make(mapstringslice) - for _, filter := range filters { - containerFilter.Set(filter) - } - } // Command notification options flag.StringVar(¬ifyCmd, "notify", "", "run command after template is regenerated (e.g `restart xyz`)") @@ -158,6 +151,24 @@ func initFlags() { flag.Usage = usage flag.Parse() + + // override containerFilter with DOCKER_CONTAINER_FILTERS environment variable + if filtersEnvVar, found := os.LookupEnv("DOCKER_CONTAINER_FILTERS"); found && filtersEnvVar != "" { + var nonBlankFilters []string + + for filter := range strings.SplitSeq(filtersEnvVar, ",") { + if strings.TrimSpace(filter) != "" { + nonBlankFilters = append(nonBlankFilters, filter) + } + } + + if len(nonBlankFilters) > 0 { + containerFilter = make(mapstringslice) + for _, filter := range nonBlankFilters { + containerFilter.Set(filter) + } + } + } } func main() { From 20e39584693a3d013e694fb7d482dbaa4224de5a Mon Sep 17 00:00:00 2001 From: Nicolas Duchon Date: Tue, 7 Oct 2025 07:39:02 +0200 Subject: [PATCH 3/3] fix: -container-filter should override the env var --- README.md | 2 +- cmd/docker-gen/main.go | 19 +++++-------------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index c5931091..79d4115d 100644 --- a/README.md +++ b/README.md @@ -157,7 +157,7 @@ Environment Variables: DOCKER_CERT_PATH - directory path containing key.pem, cert.pem and ca.pem DOCKER_TLS_VERIFY - enable client TLS verification DOCKER_CONTAINER_FILTERS - comma separated list of container filters for inclusion by docker-gen. - Filters supplied through this variable override filters supplied through the -container-filter options. + Filters supplied through this variable are ignored if -container-filter is provided. ``` If no `` file is specified, the output is sent to stdout. Mainly useful for debugging. diff --git a/cmd/docker-gen/main.go b/cmd/docker-gen/main.go index 1412cdd9..679b0a91 100644 --- a/cmd/docker-gen/main.go +++ b/cmd/docker-gen/main.go @@ -87,7 +87,7 @@ Environment Variables: DOCKER_CERT_PATH - directory path containing key.pem, cert.pem and ca.pem DOCKER_TLS_VERIFY - enable client TLS verification DOCKER_CONTAINER_FILTERS - comma separated list of container filters for inclusion by docker-gen. - Filters supplied through this variable override filters supplied through the -container-filter options. + Filters supplied through this variable are ignored if -container-filter is provided. `) println(`For more information, see https://github.com/nginx-proxy/docker-gen`) } @@ -152,20 +152,11 @@ func initFlags() { flag.Usage = usage flag.Parse() - // override containerFilter with DOCKER_CONTAINER_FILTERS environment variable - if filtersEnvVar, found := os.LookupEnv("DOCKER_CONTAINER_FILTERS"); found && filtersEnvVar != "" { - var nonBlankFilters []string - + // set containerFilter with DOCKER_CONTAINER_FILTERS if it's set and no -container-filter option was provided + if filtersEnvVar, found := os.LookupEnv("DOCKER_CONTAINER_FILTERS"); found && len(containerFilter) == 0 { for filter := range strings.SplitSeq(filtersEnvVar, ",") { - if strings.TrimSpace(filter) != "" { - nonBlankFilters = append(nonBlankFilters, filter) - } - } - - if len(nonBlankFilters) > 0 { - containerFilter = make(mapstringslice) - for _, filter := range nonBlankFilters { - containerFilter.Set(filter) + if trimmedFilter := strings.TrimSpace(filter); trimmedFilter != "" { + containerFilter.Set(trimmedFilter) } } }