ECS 上跑 Docker:日志别写进容器可写层

举报
yd_252351073 发表于 2026/10/28 11:07:01 2026/10/28
【摘要】 在华为云 ECS 上用 Docker 跑业务时,最容易被忽略的不是镜像本身,而是容器的可写层。默认情况下,容器标准输出会落到本机 json-file 日志驱动;应用如果再把日志、缓存、上传文件写进容器内部目录,一次镜像更新或容器重建就会把这些数据一起丢掉,磁盘也会在没有告警时被打满。下面是一套在 ECS 上比较稳妥、也容易落地的做法。1. 日志限制大小,并落到数据盘json-file 不限制...

在华为云 ECS 上用 Docker 跑业务时,最容易被忽略的不是镜像本身,而是容器的可写层。默认情况下,容器标准输出会落到本机 json-file 日志驱动;应用如果再把日志、缓存、上传文件写进容器内部目录,一次镜像更新或容器重建就会把这些数据一起丢掉,磁盘也会在没有告警时被打满。

下面是一套在 ECS 上比较稳妥、也容易落地的做法。

1. 日志限制大小,并落到数据盘

json-file 不限制时,单个容器的日志可以长到几十 GB。建议在运行参数里加上轮转,并把业务日志目录挂到数据盘,而不是系统盘根分区。

docker run -d --name app --restart=unless-stopped \
  --log-opt max-size=20m --log-opt max-file=5 \
  -v /data/app/logs:/var/log/app \
  -p 127.0.0.1:8080:8080 \
  your-registry/app:1.2.0

要点有三条。第一,max-size 和 max-file 控制 docker logs 占用的磁盘。第二,业务自己写的日志用 volume 挂到 /data,系统盘只留给操作系统和 Docker 引擎。第三,ECS 数据盘单独挂载并写入 fstab,避免重启后目录变成空目录,容器却照常启动,日志全部写进系统盘。

2. 端口不要直接对公网全开

安全组是 ECS 的第一道门。容器映射端口时,优先只绑定 127.0.0.1,再由本机 Nginx 或 ELB 反代。安全组入方向只放行 80/443 或业务真正需要的端口,来源收窄到办公网、堡垒机或负载均衡网段,而不是 0.0.0.0/0 上的全部端口。

数据库、Redis、管理后台端口不要映射到宿主机公网。需要临时排查时用 SSH 隧道,查完就关。

3. 重启策略和健康检查

ECS 重启或 Docker 升级后,没有 restart policy 的容器不会自己起来。生产服务至少使用 unless-stopped。同时给镜像加上 HEALTHCHECK,或在编排里配置健康检查,避免进程僵死但容器状态仍是 running,负载均衡却继续把流量打进来。

4. 镜像更新时先保住数据

发版顺序建议固定为:先确认 volume 挂载点存在且有磁盘空间,再拉取新镜像,最后用相同的 volume、日志参数和环境变量重建容器。不要把数据库数据目录和上传目录放进镜像层。密钥不要写进 Dockerfile,放到 ECS 上权限收紧的 env 文件或密钥管理服务里,运行时再注入。

按这四步处理之后,容器重建不会再误删日志和上传文件,系统盘也不容易因为 docker logs 被写满。日常巡检只看两件事:用 df -h 看数据盘水位,用 docker ps 看健康状态是不是 healthy。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。