修改 Dozzle 主机名:--hostname 与 DOZZLE_HOSTNAME 完整配置指南
修改 Dozzle 主机名--hostname 与 DOZZLE_HOSTNAME 完整配置指南【免费下载链接】dozzleRealtime log viewer for containers. Supports Docker, Swarm and K8s.项目地址: https://gitcode.com/GitHub_Trending/do/dozzleDozzle 是一款面向 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.tsDozzle 徽标下方与多主机菜单中该连接的标签由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_HOSTNAMEmywebsite.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 集群中的每个节点都运行着自己的 AgentDozzle 以全局服务global service方式部署在每个节点上各起一个 Agent 容器。由于所有 Agent 都向同一个主实例汇报若不加区分多主机菜单中会出现多个同名标签。因此请为每个节点设置不同的主机名以便在菜单中清楚区分各节点的日志来源。一种常见的做法是让 Agent 的主机名跟随节点自身的主机名例如在每个节点的 Agent 服务配置中写入对应的DOZZLE_HOSTNAME值如node1、node2、node3具体部署细节请查阅 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.xyz或DOZZLE_HOSTNAMEmywebsite.xyz本地主机的显示名仅当前进程docker-compose在environment中设置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),仅供参考