You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS中查看Docker容器内/var/log目录下的日志文件?

解决AWS ECS查看supervisord子进程日志的问题

问题根源

AWS ECS默认通过CloudWatch Logs收集的是容器主进程(此处为supervisord)的标准输出/错误流,但你当前的supervisord配置是把react-app、node-server、nginx的日志写到了容器内的/var/log/文件中,没有转发到容器的stdout/stderr,所以ECS的Logs页面只能看到Docker相关日志,看不到这些应用的日志内容。

解决方案

方法1:修改supervisord配置,直接输出到容器标准流(推荐)

把每个program的日志输出直接指向容器的/dev/stdout和/dev/stderr,让ECS能直接收集这些流。修改你的supervisord.conf如下:

[supervisord]
nodaemon=true

[program:nginx]
command=nginx -g 'daemon off;'
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0  # 禁用日志滚动,持续输出到标准流
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

[program:node-server]
command=node server.js
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

[program:react-app]
command=npm start
directory=/app
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

方法2:保留文件日志,通过tail转发到标准流(备选)

如果需要保留容器内的日志文件,可以新增一个supervisord进程,用tail命令实时读取日志文件并输出到标准流:

在supervisord.conf末尾添加:

[program:log-forwarder]
command=tail -f /var/log/nginx.log /var/log/nginx_err.log /var/log/node_server.log /var/log/node_server_err.log /var/log/react_app.log /var/log/react_app_err.log
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

这种方式会把所有日志混在一起输出,不如方法1的日志区分清晰,仅作为备选方案。

生效步骤

  1. 保存修改后的supervisord.conf
  2. 重新构建Docker镜像并推送到ECR(或你使用的镜像仓库)
  3. 更新ECS服务,使用新的镜像版本
  4. 等待服务更新完成后,再次访问ECS服务的Logs页面,就能看到各个应用的日志内容了

内容的提问来源于stack exchange,提问作者Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 11:00:03