
nginxproxy/docker-gen -container-filter key=value 用于包含容器的过滤条件。可多次指定以组合多个 AND 条件。 [***] -endpoint 字符串 Docker API 端点(tcp|unix://..)。默认 unix:///var/run/docker.sock -event-filter key=value 用于过滤 docker-gen 监控事件的附加条件(例如 -event-filter event=connect -event-filter event=disconnect)。 可多次指定以组合条件。默认情况下,docker-gen 监控容器的 start、stop、die 和 health_status 事件。 [***] -include-stopped 包含已停止的容器。如果指定了容器状态过滤条件(-container-filter status=foo),则此选项失效。 -interval 整数 通知命令的间隔时间(秒) -keep-blank-lines 保留输出文件中的空行 -notify restart xyz 模板重新生成后运行的命令(例如 restart xyz) -notify-container 容器ID 向容器发送 -notify-signal 指定的信号(默认 1/HUP)。可多次指定以通知多个容器。 -notify-filter key=value 用于通知的容器过滤条件(例如 -notify-filter name=foo)。可多次指定以组合多个 AND 条件。 [***] -notify-output 记录通知命令的输出(stdout/stderr) -notify-sighup 容器ID 向容器发送 HUP 信号。相当于 'docker kill -s HUP 容器ID' 或 '-notify-container 容器ID -notify-signal 1'。可多次指定以向多个容器发送 HUP 信号。 -notify-signal 信号 发送给 -notify-container 和 -notify-filter 的信号。-1 表示调用 docker restart。默认 1(即 HUP)。 所有可用信号请参见 dockerclient:[***] -only-exposed 仅包含已暴露端口的容器。如果使用暴露端口过滤条件(-container-filter exposed=foo),则此选项失效。 -only-published 仅包含已发布端口的容器(隐含 -only-exposed)。如果指定了容器发布端口过滤条件(-container-filter published=foo),则此选项失效。 -tlscacert 字符串 TLS CA 证书文件路径(默认 "~/.docker/ca.pem") -tlscert 字符串 TLS 客户端证书文件路径(默认 "~/.docker/cert.pem") -tlskey 字符串 TLS 客户端密钥文件路径(默认 "~/.docker/key.pem") -tlsverify 验证 Docker 守护进程的 TLS 证书 -version 显示版本信息 -wait 字符串 触发生成前等待的最小和最大时长(例如 "500ms:2s") -watch 监控容器变化 参数: template - 要生成的模板路径 dest - 模板输出路径。如果未指定,输出到 STDOUT 环境变量: DOCKER_HOST - -endpoint 的默认值 DOCKER_CERT_PATH - 包含 key.pem、cert.pem 和 ca.pem 的目录路径 DOCKER_TLS_VERIFY - 启用客户端 TLS 验证 DOCKER_CONTAINER_FILTERS - 逗号分隔的容器包含过滤条件列表。如果指定了 -container-filter,则此变量中的过滤条件将被忽略。
如果未指定 <dest> 文件,输出将发送到 stdout,主要用于调试。
使用上述 -config 标志可以指定配置文件,而非命令行选项。配置文件中可定义多个模板,它们将按出现顺序执行。
示例配置文件 docker-gen.cfg 可在 examples 文件夹中找到。
ini[[config]] # 开始一个配置段 dest = "path/to/a/file" # 生成的模板输出路径。如果未指定,则输出到 STDOUT notifycmd = "/etc/init.d/foo reload" # 模板重新生成后运行的命令(例如 restart xyz) onlyexposed = true # 仅包含已暴露端口的容器 template = "/path/to/a/template/file.tmpl" # 要生成的模板路径 watch = true # 监控容器变化 wait = "500ms:2s" # 防抖等待时长(最小:最大)。仅在 watch = true 时适用 [config.NotifyContainers] # 开始一个通知容器段 containername = 1 # 容器名称后接要发送的信号 container_id = 1 # 或使用容器 ID 后接要发送的信号
以下是完整的配置文件示例:
ini[[config]] template = "/etc/nginx/nginx.conf.tmpl" dest = "/etc/nginx/sites-available/default" onlyexposed = true notifycmd = "/etc/init.d/nginx reload" [[config]] template = "/etc/logrotate.conf.tmpl" dest = "/etc/logrotate.d/docker" watch = true [[config]] template = "/etc/docker-gen/templates/nginx.tmpl" dest = "/etc/nginx/conf.d/default.conf" watch = true wait = "500ms:2s" [config.NotifyContainers] nginx = 1 # 1 是要发送的信号编号,此处为 SIGHUP e75a60548dc9 = 1 # 键可以是容器名称(nginx)或 ID
docker-gen 使用的模板基于 Go text/template 语言编写。除了 Go 提供的 内置函数,docker-gen 还使用 sprig 和一些额外函数,以便更简单地生成所需输出。部分模板依赖容器内的环境变量来决定生成内容。
可使用分号(;)分隔 template 值来同时解析多个模板,这可作为 Golang 嵌套模板功能的替代方案。在所有情况下,主渲染模板应放在首位。
ini[[config]] template = "/etc/docker-gen/templates/nginx.tmpl;/etc/docker-gen/templates/header.tmpl" dest = "/etc/nginx/conf.d/default.conf" watch = true wait = "500ms:2s"
模板中,docker-gen 输出的对象结构由以下 Go 结构体组成:
gotype RuntimeContainer struct { ID string Created time.Time Addresses []Address Networks []Network Gateway string Name string Hostname string Image DockerImage Env map[string]string Volumes map[string]Volume Node SwarmNode Labels map[string]string IP string IP6LinkLocal string IP6Global string Mounts []Mount State State } type Address struct { IP string IP6LinkLocal string IP6Global string Port string HostPort string Proto string HostIP string } type Network struct { IP string Name string Gateway string EndpointID string IPv6Gateway string GlobalIPv6Address string MacAddress string GlobalIPv6PrefixLen int IPPrefixLen int Internal bool } type DockerImage struct { Registry string Repository string Tag string } type Mount struct { Name string Source string Destination string Driver string Mode string RW bool } type Volume struct { Path string HostPath string ReadWrite bool } type SwarmNode struct { ID string Name string Address Address } type State struct { Running bool Health Health } type Health struct { Status string } // 在模板中可通过 .Docker 访问 type Docker struct { Name string NumContainers int NumImages int Version string ApiVersion string GoVersion string OperatingSystem string Architecture string CurrentContainerID string } // 主机环境变量在模板中可通过 .Env 访问
例如,以下是 RuntimeContainer 结构体的 JSON 示例:
json{ "ID": "71e9768075836eb38557adcfc71a207386a0c597dbeda240cf905df79b18cebf", "Addresses": [ { "IP": "172.17.0.4", "Port": "22", "Proto": "tcp", "HostIP": "192.168.10.24", "HostPort": "2222" } ], "Gateway": "172.17.42.1", "Node": { "ID": "I2VY:P7PF:TZD5:PGWB:QTI7:QDSP:C5UD:DYKR:XKKK:TRG2:M2BL:DFUN", "Name": "docker-test", "Address": { "IP": "192.168.10.24" } }, "Labels": { "operatingsystem": "Ubuntu 14.04.2 LTS", "storagedriver": "devicemapper", "anything_foo": "something_bar" }, "IP": "172.17.0.4", "Name": "docker_register", "Hostname": "71e976807583", "Image": { "Registry": "jwilder", "Repository": "docker-register" }, "Env": { "ETCD_HOST": "172.17.42.1:4001", "PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "DOCKER_HOST": "unix:///var/run/docker.sock", "HOST_IP": "172.17.42.1" }, "Volumes": { "/mnt": { "Path": "/mnt", "HostPath": "/Users/joebob/tmp", "ReadWrite": true } } }
closest $array $value:返回 $array 中与 $value 匹配的最长子字符串。coalesce ...:返回第一个非 nil 参数。comment $delimiter $string:返回每行前缀为 $delimiter 的 $string(结合 Sprig 的 toPrettyJson 用于调试很有用:{{ toPrettyJson $ | comment "#" }})。contains $map $key:如果 $map 包含 $key,返回 true。接受 string 到任意类型的映射。dir $path:返回指定 $path 中的文件名数组。exists $path:如果 $path 指向现有文件或目录,返回 true。接受字符串参数。eval $templateName [$data]:像 Go 内置的 template 操作一样计算命名模板,但将结果作为字符串返回以便后续处理。可省略 $data 参数,相当于传递 nil。groupBy $containers $fieldPath:基于 $fieldPath 字段路径表达式的值对 RuntimeContainer 实例数组进行分组。字段路径表达式是点分隔的映射键或结构体成员名列表,指定从容器到嵌套字符串值的路径。返回从字段路径表达式值到具有该值的容器数组的映射。没有字段路径值的容器将被忽略



探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务