[Bug] 应用实例名含大写时,已安装应用日志抽屉的「清理日志」报 invalid project name 且实际未清理

Abierto
#14,284 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
Medio día
Aptitud para principiantes
60/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
docker, docker-compose, go
Área
backend, devops

Línea de trabajo

Start with ComposeLogClean() in agent/app/service/container_compose.go, which compares the app name against the com.docker.compose.project label and then calls compose.Operate(path, "restart", req.Name). Reuse the existing resolveComposeProjectName() there, or lowercase both sides, and check the frontend call in frontend/src/views/app-store/installed/index.vue (openLog()). Done means cleaning logs for an instance named OpenClaw truncates the container logs without a project name error. Confirm with a mixed-case compose app and the restart path.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

1Panel 版本

v2.4.1

环境
  • Docker Compose: v2.36.2
  • 系统: Linux x86_64
问题描述

应用商店安装应用时,如果把实例名改成包含大写字母(例如 OpenClaw),进入「已安装 → 日志 → 清理」会报错:

服务错误: docker-compose restart failed, std: , err: stderr: invalid project name "OpenClaw": must consist only of lowercase alphanumeric characters, hyphens, and underscores as well as start with a letter or number , err: exit status 1

实际效果是「什么都没清」:容器日志没有被截断,容器也没有被重启。同一应用的「重启」按钮是正常的,只有日志抽屉里的「清理」会触发。

推测原因:日志抽屉把应用的显示名当成 compose 项目名传给了后端,而 compose 实际项目名(容器标签 com.docker.compose.project)是小写。

重现步骤
  1. 应用商店安装任意 compose 应用,实例名填写含大写字母的名字(如 OpenClaw);
  2. 打开「应用商店 → 已安装」,在对应应用上点「日志」;
  3. 在日志抽屉里点「清理」;
  4. 接口 /containers/compose/clean/log 返回上述错误。
相关代码定位(v2.4.1)
  • frontend/src/views/app-store/installed/index.vue 的 openLog():composeLogRef.acceptParams({ compose: row.path + '/docker-compose.yml', resource: row.name, container: row.container }),resource 是应用实例名(可为大写)。
  • frontend/src/components/log/container/index.vue:清理时调用 cleanComposeLog(logSearch.resource, logSearch.compose, currentNode)。
  • agent/app/service/container_compose.go 的 ComposeLogClean():
    • 先用应用名与容器标签 com.docker.compose.project 做精确比较(openclaw != OpenClaw,所以一个容器都匹配不到,日志不会被清);
    • 随后仍以 req.Name 调用 ComposeOperation(... Operation: "restart"),最终在 compose.Operate(path, "restart", req.Name) 里拼出 --project-name OpenClaw,被 Compose v2 的项目名校验直接拒绝。
期望结果
  1. 清理日志时不要直接使用应用显示名,按 compose 文件/目录解析真实项目名(仓库中 container_compose.go 已有 resolveComposeProjectName() 可复用),或至少与容器标签做大小写归一化后比较;
  2. 更根本一些:创建应用时限制实例名只能使用小写字母/数字/连字符/下划线(与 #4986 的建议一致),并在读取历史数据时做归一化。
相关日志输出

1Panel 操作日志:

post /containers/compose/clean/log Failed
服务错误: docker-compose restart failed, std: , err: stderr: invalid project name "OpenClaw": must consist only of lowercase alphanumeric characters, hyphens, and underscores as well as start with a letter or number , err: exit status 1

容器实际标签:

com.docker.compose.project=openclaw
com.docker.compose.project.config_files=/opt/1panel/apps/openclaw/OpenClaw/docker-compose.yml
补充信息
  • 与 #4986 不同:#4986 是应用升级路径失败;本 issue 只影响「已安装应用 → 日志 → 清理」,且失败时不会产生任何副作用(没清日志、没重启容器)。
  • 临时规避:不要用该按钮,用命令直接处理容器日志;或把实例名改成全小写。
  • 修复建议:ComposeLogClean 内部先解析出真实项目名,再同时用于标签匹配和 restart,避免显示名与项目名大小写不一致时双重失败。
Lenguaje dominante
Go
Estrellas
37.3k
Forks
3.4k
Merge medio
8 h 21 min
PR fusionados (30 d)
124

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de 1Panel-dev/1Panel

Todos los issues de 1Panel-dev/1Panel

Issues similares

Más issues de Go

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.