轩辕镜像 官方专业版
轩辕镜像
专业版
轩辕镜像 官方专业版
轩辕镜像
专业版
首页个人中心搜索镜像
交易
充值流量¥8起我的订单
文档
工具
提交工单页面收录
docker-gen

nginxproxy/docker-gen

nginxproxy

docker-gen是一个文件生成工具,它使用Docker容器元数据渲染模板,可用于生成集中式日志配置、日志轮转文件、反向代理配置和服务发现脚本等各类文件。

22 次收藏下载次数: 0状态:社区镜像维护者:nginxproxy仓库类型:镜像最近更新:6 天前
让 AI 帮你使用轩辕镜像? · 展开查看说明 · 点击收起说明

如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。

只需在 AI 对话中先发送下面这段话即可:

请先阅读并遵守:https://xuanyuan.cloud/agents.md

未读文档前不要生成 pull 命令或排错方案。

查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。

中文简介
下载命令
镜像标签列表与下载命令
使用轩辕镜像,把时间还给真正重要的事。
点击查看

docker-gen

docker-gen 是一个文件生成工具,它使用 Docker 容器元数据渲染模板。

它可用于生成各类文件,适用于以下场景:

  • 集中式日志 - https://github.com/nginx-proxy/docker-gen/blob/main/templates/fluentd.conf.tmpl、logstash 或其他集中式日志工具,用于监控容器的 JSON 日志文件或容器内的文件。
  • 日志轮转 - https://github.com/nginx-proxy/docker-gen/blob/main/templates/logrotate.tmpl 文件,用于轮转容器的 JSON 日志文件。
  • 反向代理配置 - https://github.com/nginx-proxy/docker-gen/blob/main/templates/nginx.tmpl、https://github.com/jwilder/docker-discover 等反向代理配置,用于将主机请求路由到容器。
  • 服务发现 - 脚本(python、bash 等),用于在 https://github.com/jwilder/docker-register、hipache 等服务中注册容器。

安装

运行 docker-gen 有三种常见方式:

  • 在主机上运行
  • 与其他应用捆绑在同一个容器中
  • 作为独立容器运行

主机安装

下载所需版本,解压并安装到 PATH 路径下。

console
wget https://github.com/nginx-proxy/docker-gen/releases/download/0.12.0/docker-gen-linux-amd64-0.12.0.tar.gz
tar xvzf docker-gen-linux-amd64-0.12.0.tar.gz
./docker-gen

捆绑容器安装

docker-gen 可以与应用一起捆绑在容器中。

https://hub.docker.com/r/nginxproxy/nginx-proxy 可信构建是在容器中与 nginx 一起运行 docker-gen 的示例。https://github.com/jwilder/docker-register 是在容器中运行 docker-gen 以通过 etcd 进行服务注册的示例。

独立容器安装

也可以使用 https://hub.docker.com/r/nginxproxy/docker-gen 镜像将其作为两个独立容器运行,几乎可以与任何其他镜像一起使用。

以下是运行官方 https://registry.hub.docker.com/_/nginx/ 镜像并让 docker-gen 生成反向代理配置的方法,类似于 nginx-proxy 的工作方式。这样做可以避免将 docker 套接字绑定到公开暴露的容器服务。

启动带有共享卷的 nginx:

console
docker run -d -p 80:80 --name docker.xuanyuan.run/nginx -v /tmp/nginx:/etc/nginx/conf.d -t nginx

获取模板并启动带有共享卷的 docker-gen 容器:

console
mkdir -p /tmp/templates && cd /tmp/templates
curl -o nginx.tmpl https://raw.githubusercontent.com/nginx-proxy/docker-gen/main/templates/nginx.tmpl
docker run -d --name nginx-gen --volumes-from nginx \
   -v /var/run/docker.sock:/tmp/docker.sock:rw \
   -v /tmp/templates:/etc/docker-gen/templates \
   -t docker.xuanyuan.run/nginxproxy/docker-gen -notify-sighup nginx -watch -only-exposed /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf

启动容器,注意容器所需的环境变量。有关详细信息,请查看模板顶部说明。

console
docker run --env VIRTUAL_HOST='example.com' --env VIRTUAL_PORT=80 ...

使用方法

$ docker-gen
用法:docker-gen [选项] 模板 [目标文件]

从 Docker 容器元数据生成文件

选项:
  -config 路径
      包含模板指令的配置文件。如果多次指定此选项,配置文件将被合并。(默认 [])
  -container-filter key=value
      用于包含容器的过滤条件。可多次指定以组合多个 AND 条件。
      https://docs.docker.com/engine/reference/commandline/ps/#filter
  -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 事件。
      https://docs.docker.com/engine/reference/commandline/events/#filtering-events
  -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 条件。
      https://docs.docker.com/engine/reference/commandline/ps/#filter
  -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:https://github.com/fsouza/go-dockerclient/blob/main/signal.go
  -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 http://golang.org/pkg/text/template/ 语言编写。除了 Go 提供的 http://golang.org/pkg/text/template/#hdr-Functions,docker-gen 还使用 https://masterminds.github.io/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 结构体组成:

go
type 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
    }
  }
}

函数

  • https://pkg.go.dev/text/template#hdr-Functions
  • https://masterminds.github.io/sprig/,但与以下函数同名的 Sprig 函数除外。
  • 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-gen 镜像标签

docker pull docker.xuanyuan.run/nginxproxy/docker-gen:<标签>

使用方法:

  • 登录认证方式
  • 免认证方式

DockerHub 原生拉取命令

docker pull nginxproxy/docker-gen:<标签>

轩辕镜像配置手册

按平台快速找到配置文档

一键安装

一键安装 Docker

Linux Docker 一键安装

AI

用 AI 使用轩辕镜像

agents.md · AI 对话 · 提示词

Docker

登录仓库拉取

登录认证 · 私有仓库

专属域名拉取

免登录 · 高速拉取

Linux

Docker 镜像配置

Windows / Mac

Docker Desktop 配置

MacOS OrbStack

OrbStack 容器

Apple Container

macOS 原生容器

Docker Compose

Compose 项目配置

NAS

群晖

Synology 配置

飞牛

fnOS 镜像配置

绿联

绿联 NAS

威联通

QNAP 配置

极空间

极空间 NAS

Unraid

Unraid NAS

企业仓库

其他仓库

ghcr · Quay · nvcr

Harbor 镜像源

Proxy Repository 对接

Portainer 镜像源

Registries 配置

Nexus 镜像源

Docker Proxy 缓存

开发工具

Dev Containers

VS Code 开发容器

Podman

Podman 配置指南

Singularity / Apptainer

HPC 科学计算容器

Kubernetes

K8s Containerd

Kubernetes · Containerd

K3s

轻量级集群

面板 / 网络

爱快路由

爱快 4.0 · iKuai 镜像加速

宝塔面板

一键配置镜像源

需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单

镜像拉取常见问题

功能

版本功能对比

功能对比 · 版本选择

支持的镜像仓库

Docker Hub · GCR · GHCR

专属域名用法

专属域名 · 开启停用 · 多仓库

新手拉取配置

登录 · 专属域名 · 配置

docker search 限制

专属域名 · Hub 搜索

不支持 push

仅支持 pull · 不支持

拉取速度原因

带宽 · 缓存 · 冷热镜像

错误码

402 与流量用尽

402 · 流量包 · 充值

401 认证失败

401 · docker login

manifest unknown

标签错误 · 镜像不存在

410 Gone 排查

410 · Docker 升级

429 限流

免费版 · 专业版 · 企业版 · 请求频率

其他报错

DNS 超时

DNS 解析 · 网络超时

TLS 证书失败

no matching manifest(架构)

docker.sock / daemon

账号

失败是否计费

manifest · blob · 计费

申请开票(企业 / 个人)

开票 · 发票 · 工单

修改登录密码

网站 · 仓库 · 重置

注销账户

工单 · 数据 · 注销

原理

mirrors 不生效

daemon.json · 重启

去掉域名前缀

docker tag · 重命名

指定架构拉取

ARM64 · AMD64 · 多架构

latest 与「最新」

digest · 版本号 · 标签

查看全部问题→

用户好评

来自真实用户的反馈,见证轩辕镜像的优质服务

用户头像

oldzhang

运维工程师

Linux服务器

5

"Docker访问体验非常流畅,大镜像也能快速完成下载。"

轩辕镜像
镜像详情
...
nginxproxy/docker-gen
定价查看流量套餐与价格
博客Docker 镜像公告与技术博客
专业版 · 高速稳定拉取镜像
高速镜像下载·在线技术支持·99.95% SLA 保障·付费会员免广告
50GB 仅 ¥8/年
专业版 · 高速稳定拉取镜像
50GB 仅 ¥8/年
高速镜像下载·在线技术支持·99.95% SLA 保障·付费会员免广告
用户协议·隐私政策·增值电信业务经营许可证:浙B2-20261007·©2024-2026 源码跳动©2024-2026 杭州源码跳动科技有限公司·商务合作:点击复制邮箱

更多 docker-gen 镜像推荐

jwilder/docker-gen logo

jwilder/docker-gen

jwilder
暂无描述
160 次收藏1亿+ 次下载
6 天前更新
helder/docker-gen logo

helder/docker-gen

helder
支持动态容器名称的docker-gen增强版镜像,通过标签向容器发送SIGHUP信号,解决Docker Cloud或Swarm Mode环境中容器名称与服务名不匹配导致的配置重载问题。
4 次收藏50万+ 次下载
5 年前更新
p1st/docker-gen logo

p1st/docker-gen

p1st
基于nginxproxy/docker-gen:latest的镜像,预包含nginx.tmpl模板文件(位于/etc/docker-gen/templates/nginx.tmpl),用于自动生成Nginx配置。
5万+ 次下载
3 天前更新
mminks/docker-gen logo

mminks/docker-gen

mminks
该镜像打包最新版docker-gen、bash、AWS CLI和cli53,支持自动化生成配置文件及AWS Route53等资源管理,适用于基础设施自动化场景。
1万+ 次下载
7 年前更新
poma/docker-gen logo

poma/docker-gen

poma
该镜像基于jwilder/docker-gen,内置nginx模板文件,支持通过nginx_*环境变量配置nginx,可自动生成反向代理配置并配合Let's Encrypt实现HTTPS,适用于多容器服务场景。
1万+ 次下载
4 年前更新
p1st/docker-gen logo

p1st/docker-gen

p1st
基于nginxproxy/docker-gen:latest的镜像,预包含nginx.tmpl模板文件(位于/etc/docker-gen/templates/nginx.tmpl),用于自动生成Nginx配置。
5万+ 次下载
3 天前更新

查看更多 docker-gen 相关镜像