Docker logs 能查看 Apache 日志的前提是日志输出到 stdout/stderr:需在 Dockerfile 中用软链接将 access_log 和 error_log 指向 /dev/stdout 与 /dev/stderr,并确保 Apache 以前台模式(如 CMD ["httpd", "-D", "FOREGROUND"])运行。
直接用 docker logs 就能看 Apache 的运行记录,但前提是容器里的 Apache 日志得正确输出到标准输出(stdout)和标准错误(stderr),否则 docker logs 会显示为空或只有启动信息。
默认情况下,Apache(如 httpd 或 apache2)把访问日志写入文件(比如 /usr/local/apache2/logs/access_log 或 /var/log/apache2/access.log),而 Docker 只能捕获容器进程的标准输出/错误流。所以需要做软链接,把日志文件重定向到 /dev/stdout 和 /dev/stderr:
RUN ln -sf /dev/stdout /usr/local/apache2/logs/access_log &&
ln -sf /dev/stderr /usr/local/apache2/logs/error_log
/var/log/apache2/,对应改为:RUN ln -sf /dev/stdout /var/log/apache2/access.log &&
ln -sf /dev/stderr /var/log/apache2/error.log
CMD ["httpd", "-D", "FOREGROUND"] 或 CMD ["apachectl", "-D", "FOREGROUND"]),否则日志重定向无效确认容器正在运行后,用容器名或 ID 执行以下命令:
docker logs my-apache
docker logs -t my-apache
docker logs -f my-apache
docker logs --tail 20 my-apache
docker logs --since "2026-06-07T14:00:00" my-apache
如果 docker logs 没有 Apache 访问记录,可能是以下原因:
docker inspect my-apache | grep Cmd,应含 FOREGROUND)ls -l /usr/local/apache2/logs/ 看是否指向 /dev/stdout)不需要重建镜像也能临时验证日志流向:
docker exec -it my-apache bash
echo "$(date) test access" >> /usr/local/apache2/logs/access_log
docker logs -n 1 my-apache,看是否出现该行