Docker 如何查看容器的日志?

Docker 如何查看容器的日志?,docker,nginx,dockerfile,Docker,Nginx,Dockerfile,我有一个Dockerfile FROM centos:7 ENV container docker RUN yum -y update && yum -y install net-tools && yum -y install initscripts && yum -y install epel-release && yum -y install nginx && yum clean all RUN echo &

我有一个Dockerfile

FROM centos:7

ENV container docker

RUN yum -y update && yum -y install net-tools && yum -y install initscripts && yum -y install epel-release && yum -y install nginx && yum clean all
RUN echo "daemon off;" >> /etc/nginx/nginx.conf

# expose Nginx ports http/https
EXPOSE 80 443

RUN curl https://www.sheldonbrown.com/web_sample1.html > /usr/share/nginx/index.html
RUN mv /usr/share/nginx/index.html /usr/share/nginx/html/index.html -f

RUN mkdir -p /local/nginx
RUN touch /local/nginx/start.sh
RUN chmod 755 /local/nginx/start.sh
RUN echo "#!/bin/bash" >> /local/nginx/start.sh
RUN echo "nginx" >> /local/nginx/start.sh
RUN echo "tail -f /var/log/nginx/access.log" >> /local/nginx/start.sh

ENTRYPOINT ["/bin/bash", "-c", "/local/nginx/start.sh"]
我正在用docker build-t“my\u nginx”构建它。

然后使用
docker run-i-t--rm-p8888:80--name nginx“my\u nginx”

https://localhost:8888/ 显示页面,但不显示日志记录

  • 如果我按Ctrl-C,nginx将停止,但日志记录上的尾部将显示出来
  • 如果我再次按下Ctrl-C,容器就不见了

问题:如何让nginx运行并在日志上显示尾部(最好使用“docker logs”-命令也可见)您应该从Dockerfile中删除
tail
命令,使用
docker run-it-d--rm-p 8888:80--将nginx命名为“my\u nginx”运行容器
然后使用
docker logs-f nginx

实现这一点最简单的方法就是使用,它可以为您解决这一问题。一个小到

来自nginx:1.19的

#特别使用ADD,因为它将获取URL
添加https://www.sheldonbrown.com/web_sample1.html /usr/share/nginx/html/index.html
如果您看一下,它实际上使用符号链接使Nginx的“正常”日志转到容器stdout

#将请求和错误日志转发给docker日志收集器
运行ln-sf/dev/stdout/var/log/nginx/access.log\
&&ln-sf/dev/stderr/var/log/nginx/error.log
这就绕过了Dockerfile中的大多数机制:您可以将
nginx
作为主容器命令运行,而无需尝试使用第二个进程来编辑日志。你基本上可以修剪掉整个后半部分,然后

来自centos:7
环境集装箱装卸工
运行yum-y安装epel版本\
&&yum-y安装网络工具initscripts nginx\
&&百胜
运行echo“daemon off;”>>/etc/nginx/nginx.conf\
&&ln-s/dev/stdout/var/log/nginx/access.log\
&&ln-s/dev/stderr/var/log/nginx/error.log
运行curl-o/usr/share/nginx/html/index.htmlhttps://www.sheldonbrown.com/web_sample1.html
曝光80443
CMD[“nginx”]
这里的另一种可能性(使用这些图像中的任何一个)是在容器的
/var/log/nginx
目录上装载您自己的卷。这为您提供了自己的主机可见日志目录,您可以在方便的时候检查这些日志

mkdir logs
docker run -v $PWD/logs:/var/log/nginx -d ...
less logs/access.log
(在Dockerfile中构造的shell脚本中,使用Nginx
daemon off
指令作为前台进程运行,这意味着
Nginx
命令将永远不会自行退出。这反过来意味着脚本永远不会前进到
tail
行,这就是为什么您不会注销。)