可观测学堂

可观测问答

聚焦概念、架构、排障、价格与选型,一篇解决一个明确问题。

Docker 中 expose 和 publish 有什么区别? cover
概念指南

Docker 中 expose 和 publish 有什么区别?

EXPOSE 是 Dockerfile 里的文档性声明(声明容器监听端口,不做实际映射);publish(-p)是 docker run 时建立宿主机到容器的真实端口映射。声明 ≠ 开通,本文讲透两者关系。

Docker 容器的 Running(运行中)和 Starting(启动)有什么区别? cover
概念指南

Docker 容器的 Running(运行中)和 Starting(启动)有什么区别?

run 是"创建+启动"二合一(产生新容器),start 是"启动已存在的容器"(复用旧容器状态);running 是容器主进程正在执行的状态。本文讲清 docker run/start/create 的状态流转。

Docker 容器的运行时性能开销到底有多大? cover
概念指南

Docker 容器的运行时性能开销到底有多大?

容器共享宿主机内核,CPU/内存开销接近原生(通常 <5%);有开销的点是网络 NAT、存储驱动与磁盘 I/O、以及过度限制资源。本文量化常见开销并给出优化建议。

Docker 镜像存储在宿主机的什么位置? cover
概念指南

Docker 镜像存储在宿主机的什么位置?

Linux 上 Docker 镜像默认存 /var/lib/docker(overlay2 分层目录),用 docker info 查 Docker Root Dir 确认;Mac/Windows 的 Docker Desktop …

Nginx 报 502 Bad Gateway 怎么办? cover
概念指南

Nginx 报 502 Bad Gateway 怎么办?

502 表示 Nginx 作为反向代理连不上后端:先查后端服务是否在跑(systemctl status)、端口/socket 是否匹配、超时与缓冲区配置,再看 error.log 定因。本文给出完整排查链。

Nginx 启动报 bind() failed (98: Address already in use) 怎么办? cover
概念指南

Nginx 启动报 bind() failed (98: Address already in use) 怎么办?

80 端口被占用导致 Nginx 起不来:用 ss -tulnp 或 lsof -i :80 找到占用进程(常是 Apache、旧 nginx、其他服务),停掉或改端口;也可能是配置里重复 listen。本文给排查步骤。

Apache 的 www-data 用户对 /var/www 的权限怎么设置最合理? cover
概念指南

Apache 的 www-data 用户对 /var/www 的权限怎么设置最合理?

/var/www 推荐权限:属主 root 或部署用户、组 www-data;目录 755、文件 644;需写入的目录(上传/缓存)单独给 www-data 写权限。切忌 777。本文给出命令与安全原则。

能让 rsync 只输出传输摘要(不逐文件刷屏)吗? cover
概念指南

能让 rsync 只输出传输摘要(不逐文件刷屏)吗?

可以:rsync 加 --stats 在结束时输出传输统计摘要(文件数、字节数、速度、耗时),不加 -v 即可避免逐文件输出;要更安静用 -q。本文给出常用输出级别组合。

Nginx 的 client_max_body_size 设置了不生效怎么办? cover
概念指南

Nginx 的 client_max_body_size 设置了不生效怎么办?

client_max_body_size 不生效的常见原因:放错上下文层级被覆盖、改完没 reload、前面还有一层代理(云 LB/CDN)限制、或报错其实来自应用(如 PHP 的 upload_max_filesize)。逐项排查即可。

Nginx 如何在一个子域名下配置多个 location 指向不同的根目录? cover
概念指南

Nginx 如何在一个子域名下配置多个 location 指向不同的根目录?

在一个 server 块内写多个 location,各自指定 root 即可;注意 root 与 alias 的路径拼接差异、静态站 SPA 的 try_files、以及末尾斜杠问题。本文给出完整配置示例。

cron 日志报 (No MTA installed, discarding output) 怎么解决? cover
概念指南

cron 日志报 (No MTA installed, discarding output) 怎么解决?

该提示表示 cron 任务的输出无处投递:系统没装邮件服务(MTA),输出被丢弃。解法:任务里重定向到日志文件、装轻量 MTA(如 msmtp)、或用 systemd timer。本文给出各方案。

crontab 报 missing newline before EOF 怎么解决? cover
概念指南

crontab 报 missing newline before EOF 怎么解决?

crontab 文件最后一行必须以换行符结尾,否则 cron 报 missing newline before EOF 且最后一行任务不生效。手动编辑加一行回车即可;自动生成 crontab 的脚本要补 \n。