无法在运行Nginx Docker或查看日志时使用-lt

13

我最近拉取了一个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查看该文件,它会执行而不会卡住或出现任何问题。

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

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

再一次,终端卡在下一行不做任何操作,但似乎它能正常工作,因为我可以访问nginx的欢迎页面。

我真的很困惑正在发生什么事情,我试图搜索此问题,但到目前为止没有找到任何解决方案。如果无法查看日志,则调试将非常困难 :) 此外,根据约定,docker容器应该将访问日志移动到stdout中,不是吗?


在容器中是否存在文件/var/log/nginx/access.log?尝试通过docker run -i -t -p 80:80 nginx /bin/bash进入容器并交互式运行命令。 - Daniel t.
是的,access.log文件在那里。root@ip-10-232-1-195:~/docker-registry/dockerfiles# docker exec d24a412224684434dfe9cf950015619ca4fc397e235602649591e2e5c46f4194 ls /var/log/nginx/access.log /var/log/nginx/access.log - alexfvolk
运行 ls -al 而不是仅运行 ls,并发布输出。 - Daniel t.
1个回答

29
如果您进入容器内部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 显然,日志是写在stdout中的。您还可以尝试在容器内执行cat access.log,但仍然不会显示任何内容。
现在,获取日志的正确方法是离开容器并执行docker logs<container-id>。 然后,您会看到您的日志。 希望这有所帮助!

1
谢谢 :) 我现在看到输出了,我想那是我的错误,我一直在使用错误的IP地址。 - alexfvolk
这对我有用,但是由于我的容器没有安装bash,所以我不得不使用/bin/sh - Sean D.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接