运行Nginx Docker或cat日志时无法使用-lt

问题描述 投票:0回答:2

我最近拉取了一个 nginx 镜像:

docker pull nginx

我可以成功运行它并访问 http://server_name 并看到“Welcome to Nginx”页面:

docker run -d -p 80:80 nginx

但是当我尝试检查日志时:

docker exec 6c79549e3eb4f6e5fc06f049b67814ac4560ce2cdd7cc6ae84b44b5ae09a9a05 cat /var/log/nginx/access.log

它只是挂起并且不输出任何内容。与错误日志相同。现在,如果我在同一文件夹中创建一个 test.txt 文件并使用 docker exec 来(查看)cat 该文件,我将执行而不会挂起或出现任何问题。

即使我尝试以交互模式运行它,它也会挂起:

docker run -i -t -p 80:80 nginx

终端再次挂在下一行,什么也不做,但它似乎有效,因为我可以访问 nginx 欢迎页面。

真的很困惑发生了什么,我试图寻找这个问题,但到目前为止还没有找到任何解决方案。如果无法查看日志,调试将会非常困难:) 另外,访问日志不应该移动到 nginx 容器中的 stdout,因为按照惯例 docker 容器日志会记录到 stdout?

nginx docker freeze cat
2个回答
30
投票

如果您进入容器

docker exec -it <container-id> /bin/bash
并检查日志位置
ls -la /var/log/nginx/
,您将看到以下输出:

lrwxrwxrwx 1 root root   11 Apr 30 23:05 access.log -> /dev/stdout
lrwxrwxrwx 1 root root   11 Apr 30 23:05 error.log -> /dev/stderr
显然,日志是写在标准输出中的。您也可以尝试在容器内执行
cat access.log
,但它仍然不显示任何内容。
现在,获取日志的正确方法是走出容器并执行
docker logs <container-id>
然后,您会看到您的日志。 希望这有帮助!


0
投票

您还可以将文件夹挂载到/var/log/nginx。然后nginx将创建日志文件作为常规文件,您可以在主机中看到它们

docker run -d nginx -p 8000:80 -v /myhostlogs:/var/log/nginx
curl http://localhost
cat /myhostlogs/access.log
© www.soinside.com 2019 - 2024. All rights reserved.