修改 Dozzle 主机名:--hostname 与 DOZZLE_HOSTNAME 完整配置指南
2026/9/15 11:51:17 网站建设 项目流程

修改 Dozzle 主机名:--hostname 与 DOZZLE_HOSTNAME 完整配置指南

【免费下载链接】dozzleRealtime log viewer for containers. Supports Docker, Swarm and K8s.项目地址: https://gitcode.com/GitHub_Trending/do/dozzle

Dozzle 是一款面向 Docker、Swarm 与 K8s 容器的实时日志查看器。在单机或多主机场景下,每个被监控的主机在界面中都有一个"连接名"用于标识,默认情况下本地连接的名称为localhost。本指南以 docs/zh/guide/hostname.md 为骨架,讲解如何通过--hostname命令行参数(或DOZZLE_HOSTNAME环境变量)把这一显示名称改成任意可读值,以及它在多主机、远程 Agent 与 Swarm 模式下如何正确配置,帮助你在运行多个 Dozzle 实例时快速区分不同主机的日志来源。

为什么需要自定义主机名

Dozzle 启动后会将当前连接的 Docker 引擎作为一个"主机"展示在 Web 界面中。默认情况下,这个连接的标签是localhost。当你的环境中同时接入多个远程主机或 Agent 时,若所有实例都显示为localhost,你将无法从界面快速判断当前浏览的是哪台机器的容器日志。

--hostname参数正是为了解决这个标识问题而设计:它会把该值显示在页面标题以及 Dozzle 徽标下方,同时多主机菜单中对应连接的标签也会随之改变。从实现上看,这个值最终会成为container.Host结构体中Name字段的值:

  • 在 internal/docker/client.go 的NewLocalClient中,Dozzle 先通过 Docker 引擎的Info拿到引擎自报的名称info.Name作为host.Name;若--hostname非空,则用它覆盖host.Name,实现显示名称的定制。
  • Name会随主机列表一起下发给前端:在 internal/web/index.go 中,config["hostname"] = h.config.Hostname被写入注入页面配置;前端在 assets/composable/app/title.ts 中读取hostname,动态生成形如Dozzle @ mywebsite.xyz的浏览器页面标题;assets/components/shell/SidePanel.vue 也会在侧边面板中展示该值。

也就是说,--hostname影响的不是 Docker 容器自身的系统主机名,而是 Dozzle 在 Web 界面中用来展示、排序与区分主机的"显示名"。下面用一个示例说明如何把默认的localhost改成mywebsite.xyz

通过命令行参数设置主机名

启动 Dozzle 时,在命令尾部追加--hostname参数即可,例如:

docker run --volume=/var/run/docker.sock:/var/run/docker.sock -p 8080:8080 amir20/dozzle --hostname mywebsite.xyz

执行后:

  • 页面标题变为Dozzle @ mywebsite.xyz(当页面进入某个容器详情并设置副标题时,格式为副标题 - Dozzle @ mywebsite.xyz,见 title.ts);
  • Dozzle 徽标下方与多主机菜单中,该连接的标签由localhost变为mywebsite.xyz

通过环境变量 DOZZLE_HOSTNAME 设置主机名

在 Docker Compose 或容器编排场景下,环境变量方式往往更便于维护。Dozzle 的参数解析基于go-arg库,Hostname字段通过arg:"env:DOZZLE_HOSTNAME"声明(见 internal/support/cli/args.go),因此命令行参数与环境变量二者等价,且命令行参数优先级更高(go-arg的处理顺序为先环境变量后命令行)。docker-compose.yml 示例:

services: dozzle: image: amir20/dozzle:latest volumes: - /var/run/docker.sock:/var/run/docker.sock ports: - 8080:8080 environment: DOZZLE_HOSTNAME: mywebsite.xyz

同样地,在docker run中也可以使用环境变量形式:

docker run --volume=/var/run/docker.sock:/var/run/docker.sock -e DOZZLE_HOSTNAME=mywebsite.xyz -p 8080:8080 amir20/dozzle:latest

多主机与 Agent 场景下的主机名

--hostname只会重命名运行当前Dozzle 进程所连接的主机,而不会影响远程主机。当通过远程 Agent 接入多台机器时,每个远程 Agent 会公布各自的名称,因此你需要在每个 Agent 上单独设置DOZZLE_HOSTNAME(或--hostname),由它决定自己在多主机菜单中的显示方式。相关配置方式可参考 Agent 部署指南。

从源码调用链可以印证这一行为:

  • 本地服务器模式在 internal/support/cli/clients.go 中通过docker.NewLocalClient(args.Hostname, localHostIDs)args.Hostname传给本地客户端;
  • Agent 模式在 internal/support/cli/agent_command.go 中同样以args.Hostname调用docker.NewLocalClient,即每个 Agent 进程都会用自己的--hostname生成主机名并上报给主 Dozzle 服务器。

Swarm 模式:为每个节点设置不同主机名

在 Swarm 模式 下,Swarm 集群中的每个节点都运行着自己的 Agent(Dozzle 以全局服务(global service)方式部署,在每个节点上各起一个 Agent 容器)。由于所有 Agent 都向同一个主实例汇报,若不加区分,多主机菜单中会出现多个同名标签。因此请为每个节点设置不同的主机名,以便在菜单中清楚区分各节点的日志来源。一种常见的做法是让 Agent 的主机名跟随节点自身的主机名,例如在每个节点的 Agent 服务配置中写入对应的DOZZLE_HOSTNAME值(如node1node2node3),具体部署细节请查阅 Swarm 模式指南。

与主机标识(Host ID)的区别

注意区分两个容易混淆的参数:

  • --hostnameDOZZLE_HOSTNAME):仅用于显示,控制主机在界面与多主机菜单中的标签,可随意设置为可读名称。
  • --host-idDOZZLE_HOST_ID):用于覆盖 Dozzle 派生出的主机标识。该标识会作为/api/hosts/{host}/...路由中的路径段使用,因此只允许包含字母、数字、短横线、下划线与点号,在 internal/support/cli/args.go 中会通过正则^[A-Za-z0-9_.-]+$校验。只有当某个主机派生出的 ID 与另一台主机冲突时才需要设置它。

在排查"界面标签与预期不符"的问题时,可以先确认当前使用的是--hostname还是--host-id:前者管显示名,后者管路由标识,两者互不替代。

小结

使用场景配置方式生效范围
单机部署docker run ... --hostname mywebsite.xyzDOZZLE_HOSTNAME=mywebsite.xyz本地主机的显示名,仅当前进程
docker-composeenvironment中设置DOZZLE_HOSTNAME本地主机的显示名
多主机 + Agent在每个 Agent 上分别设置DOZZLE_HOSTNAME每个 Agent 各自公布的显示名
Swarm 模式为每个节点上的 Agent 设置不同的DOZZLE_HOSTNAME各节点在多主机菜单中可区分

配置完成后,打开 Dozzle 页面即可在标题栏与多主机菜单中看到自定义的主机名,便于在多实例环境中快速定位日志来源。

【免费下载链接】dozzleRealtime log viewer for containers. Supports Docker, Swarm and K8s.项目地址: https://gitcode.com/GitHub_Trending/do/dozzle

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询