查找问题与解决方法
curl 加了 --create-dirs,保存响应头仍报 Failed to open
curl 早于 8.11.0 时,--create-dirs 不会为响应头文件创建目录。区分本地写入失败、输出路径与版本边界,并给出兼容旧版本的目录准备方法。
Docker Compose 启动 bash 后立即 Exited (0),无法 exec 进入容器
开发镜像以 bash 为主进程,docker compose up -d 后立即 Exited (0),exec 会因容器未运行而失败。核对实际启动命令,按长期开发 shell 或一次性终端选择 stdin_open、tty 和 compose run,并保全重建前的数据。
Dockerfile 没写 requirements.txt,构建仍在 ONBUILD 阶段报文件缺失
检查基础镜像登记的 ONBUILD 触发指令,区分父镜像构建约定与子 Dockerfile 内容,再选择准备输入或更换基础镜像。
Traefik 同一站点 444 正常、443 返回 404:检查重复入口标签
同一 HTTPS router 写了重复 entrypoints 标签,444 正常而 443 返回 404;合并入口列表,并核对两个入口的认证与访问限制。
脚本写了 #!/bin/bash,运行仍报 Bad substitution:检查是否用 sh 启动
Bash脚本首行正确仍报Bad substitution时,检查是否由sh读取,修正真实任务入口并保留合适执行权限。
Python sqlite3 查询到记录,rowcount 仍返回 -1
区分 SELECT 的结果条数与修改行数,按存在判断、完整取数或总数统计选择读取方式,避免重复 fetchall 丢掉数据。
PostgreSQL 的 NOT IN 子查询含 NULL,查询返回零行
PostgreSQL 的 NOT IN 子查询只要混入 NULL,就可能让本应保留的记录全部消失。检查实际排除集合,按编号匹配改写 NOT EXISTS,并明确外层空值和空集合的处理规则。
PostgreSQL 连续 UNION 的前两个分支为 NULL,报 text and integer cannot be matched
连续 UNION 的前两个分支只有无类型 NULL 时,中间结果可能先确定为 text。给占位值显式指定类型,并核对 UNION ALL 的行数与输出类型。
ln -s 已创建链接,打开却报 No such file or directory:相对路径基于链接目录
ln -s 跨目录创建后目标不存在,按链接父目录解释相对路径;GNU -r 自动生成时保留路径规范化和不覆盖已有文件条件。
Java Collectors.toMap 报 IllegalStateException: Duplicate key
Java 二参数 toMap 遇到相等的映射键会抛出异常。明确唯一性或合并规则,安全合并列表,并区分收集结果与业务处理的副作用。
find 两个名称加 -print 后漏结果:OR 分支没有共享输出动作
find 的隐式 AND 优先于 OR,左侧匹配后可能跳过右侧 -print。为名称条件分组,让类型约束与输出动作覆盖两个分支,并区分显式动作和默认打印。
systemd 把日志格式中的 %u、%t 改成了用户名和运行目录
systemd unit 的 Environment 和 ExecStart 会处理百分号 specifier;需要交给应用的字面百分号写成双百分号,并分别验证加载配置与应用输出。
Nginx 配置报 events directive is not allowed here
Nginx 在 conf.d 文件中报 events 或 worker_connections directive is not allowed here,通常与 include 所在的配置层级有关。核对实际主配置,将事件设置合并回已有 events 块,再检查并加载。
Docker Compose 报 start_interval is not allowed
healthcheck 的 start_interval 需要 Compose 2.20.2 起的解析支持,启动阶段调度还要求 Engine 25.0 及以上。核对实际版本、兼容替代配置和重建后的健康检查状态。
SQLite INSERT OR REPLACE 后关联子表数据被级联删除
唯一键冲突的 REPLACE 会删除旧父行,延迟外键检查不能保住子记录;改用保留父键的 UPSERT,并单独核对已提交的数据损失。
Docker COPY --from 变量未展开:把参数用于 FROM 并引用阶段别名
COPY --from 的 ARG 变量保留为字面引用,不能用 RUN 的展开结果判断。改成参数化 FROM 来源阶段,再用稳定别名复制文件。
Certbot 容器每天重复申请证书:只导出 PEM,没有保留续期状态
临时 Certbot 容器只导出证书文件,下一次任务却丢失续期状态。保留完整配置、复用 renew,并分别检查验证、部署和服务证书。
MySQL 查询报 Every derived table must have its own alias
MySQL 的 FROM 或 JOIN 子查询缺少表别名时报 1248。区分列别名与派生表名,核对多层括号、输出列名及连接结果。
systemd 隐藏了服务用户的家目录:用 ProtectHome=tmpfs 配置窄范围访问
服务账户能在终端访问自己的家目录,systemd 却启动失败时,检查 ProtectHome 的挂载视图,再用 tmpfs 与窄范围只读绑定配置所需路径。


