• docker日志


    docker日志

    首先我们先日常运行一个nginx容器,日志会在终端输出访问日志以及错误日志

    [root@localhost ~]# docker run -it -p 80:80 nginx

    现在我们打开网站访问一下nginx

     

     因为我们在启动日志的时候没有使用-d参数,httpd容器以前台方式启动,日志会直接打印到当前的终端窗口。 加-d参数以后后台方式运行容器,我们就看不到输出的日志了

    这种情况下如果要查看容器的日志,有两种方法 attach到该容器

    [root@localhost ~]# docker attach 2ecf757
    192.168.172.1 - - [20/Jun/2020:06:34:03 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36" "-"
    192.168.172.1 - - [20/Jun/2020:06:34:03 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36" "-"
    192.168.172.1 - - [20/Jun/2020:06:34:04 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36" "-"

    用docker logs 命令查看日志

    attach 的方法在实际使用中不太方便,因为:

    1.只能看到attach之后的日志,以前的日志不可见

    2.退出attach状态比较麻烦ctrl+p+q 一不小心很榕溪将容器杀掉,查看容器推荐的方法是 docker logs命令

    [root@localhost ~]# docker logs -f 22fbc207a41a6d
    /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
    /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
    /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
    10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
    10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
    /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
    /docker-entrypoint.sh: Configuration complete; ready for start up
    192.168.172.1 - - [20/Jun/2020:06:39:55 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36" "-"
    192.168.172.1 - - [20/Jun/2020:06:39:55 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36" "-"
    192.168.172.1 - - [20/Jun/2020:06:39:55 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36" "-"

    docker logs能够打印出容器启动以来完整的日志,并且 -f参数可以继续打印出新产生的日志效果上和linux  tail -f一样

    docker支持多种日志方案

    将容器日志发送到stdout 和stderr是docker的默认日志行为,实际上 docker提供了多种日志机制帮助用户从运行的容器中提取日志信息,这些机制被称作logging driver

    docker默认的logging driver是json-file

    [root@localhost ~]# docker info |grep 'Logging Driver'
     Logging Driver: json-file

    如果容器在启动时没有特别指明,就会使用这个默认的json-file 会将容器的日志保存在json文件中,docker 负责格式化其内容 并输出到stdout和stderr 我们可有再host 的容器目录中找到这个文件容器路径为

    [root@localhost ~]# docker container inspect 22fbc207a41a |grep 'LogPath'
            "LogPath": "/var/lib/docker/containers/22fbc207a41a6dc8227dd705768a635a729fd778b57da7632f7cf92a6e8c091e/22fbc207a41a6dc8227dd705768a635a729fd778b57da7632f7cf92a6e8c091e-json.log",

     none是disable容器日志功能

    syslog和journald 是linux上的两种日志管理服务

    awslogs     splunk和gcplogs是第三方日志托管服务

    gelf和fluentd是两种开源的日志管理方案

    容器启动时可以通过 --log driver 指定使用的logging driver 如果要设置docker默认的 logging driver 需要修改 docker daemon的启动脚本,指定 --log-driver参数

    [root@localhost ~]# docker info |grep 'Logging Driver'
     Logging Driver: none
  • 相关阅读:
    .NET/C#程序开发中如何更优美地实现失败任务重试的逻辑?
    ava.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
    mysql安装到这里不能下去了,怎么解决
    win10安装jdk8点击下一步没反应,点击下一步闪退,win10安装jdk8失败
    运行打包的jar,jar中没有主清单属性
    idea如何打包项目(java)
    关于idea(eclipse同样适用,都是一样的步骤)无法导入Javafx包的问题及解决方案:
    Intellij idea 报错:Error : java 不支持发行版本5
    Class.getResource("xxx.css")得到值为null
    jdk11安装没有jre文件夹
  • 原文地址:https://www.cnblogs.com/cy888888/p/13168933.html
Copyright © 2020-2023  润新知