TL;DR

在容器化/受限环境里,systemctl reload caddy 可能因 PrivateTmp=true 的命名空间挂载失败(status=226/NAMESPACE)。此时 Caddy 进程仍健康,可直接用 caddy reload --config ... --adapter caddyfile 走管理 API 热加载,无需重启。

一、现象

修改 /etc/caddy/Caddyfile 后执行:

systemctl reload caddy

失败:

Failed to create destination mount point node '/run/systemd/unit-root/tmp': No such file or directory
Failed at step NAMESPACE spawning /usr/local/bin/caddy: No such file or directory

systemctl status caddy 显示进程 active (running),旧配置仍在服务。

二、原因

Caddy 官方 systemd 单元带 PrivateTmp=true,reload 时需要为子进程重建临时目录挂载命名空间;在部分 VPS/容器内核环境下该路径不可用,导致 ExecReload 失败。属于环境问题,不是配置语法问题。

三、解决

先用 caddy validate 确认语法:

caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile

再直接调用管理 API 热加载:

caddy reload --config /etc/caddy/Caddyfile --adapter caddyfile

Caddy 运行时会监听 127.0.0.1:2019 管理接口,reload 命令会把新配置推送过去,进程不重启、连接不中断。

四、验证

curl -H "Host: example.com" http://127.0.0.1/

确认新页面生效,且既有 WebSocket/代理路径仍然工作。

五、注意事项

结论

systemd 的 reload 失败不等于 Caddy 不可用;管理 API 热加载是更可控的路径。

最后更新:2026-08-02