【问题标题】:Where is a log file with logs from a container?包含来自容器的日志的日志文件在哪里?
【发布时间】:2015-10-08 13:30:23
【问题描述】:

我正在使用docker-compose 运行多个容器。我可以使用命令docker-compose logs 查看应用程序日志。但是,例如,我想访问原始日志文件以将其发送到某个地方?它位于哪里?我猜它是每个容器(在容器内?)的单独日志,但我在哪里可以找到它?

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    可以在以下位置找到容器的日志:

    /var/lib/docker/containers/<container id>/<container id>-json.log
    

    (如果您使用默认的日志格式,即 json)

    【讨论】:

    • 有很多像004279dd2985037950beeba7e6fe45c10354476d3b82afb68e72dd612b03a8ff这样的文件夹。如何知道查看特定容器的文件夹?
    • @PraveenSripati 如果您这样做docker ps,则运行容器的容器 ID 将显示在第一列中
    • @PraveenSripati 写docker ps,您将获得所有可用容器及其 ​​ID。复制所需容器的 ID,然后从 /var/lib/docker/containers/ 运行 ls | grep &lt;paste the copied docker ID&gt;。然后你会看到那个 docker 容器
    • cd /var/lib/docker/containers/ -bash: cd: /var/lib/docker/containers/: Permission denied sudo cd /var/lib/docker/containers/ sudo: cd: command not found b>
    • @Chris 我必须这样做docker ps --no-trunc才能看到整个id
    【解决方案2】:

    您可以docker inspect每个容器查看它们的日志在哪里:

    docker inspect --format='{{.LogPath}}' $INSTANCE_ID
    

    而且,如果您试图找出日志在哪里管理它们的集体大小,或调整日志记录本身的参数,您会发现以下相关内容。

    修复为日志保留的空间量

    这取自Request for the ability to clear log history (issue 1083)):

    Docker 1.8 和 docker-compose 1.4 已经存在使用docker compose log driver 和 log-opt max-size 限制日志大小的方法:

    mycontainer:
      ...
      log_driver: "json-file"
      log_opt:
        # limit logs to 2MB (20 rotations of 100K each)
        max-size: "100k"
        max-file: "20"
    

    在版本 '2' 的 docker compose files 中,语法发生了一些变化:

    version: '2'
    ...
    mycontainer:
      ...
      logging:
        #limit logs to 200MB (4rotations of 50M each)
        driver: "json-file"
        options:
          max-size: "50m"
          max-file: "4"
    

    (请注意,在这两种语法中,数字都表示为字符串,用引号括起来)

    docker-compose logs 未终止的可能问题

    • issue 1866:如果容器已经停止,命令 logs 不会退出

    【讨论】:

    • 简短版:docker inspect -f '{{.LogPath}}' $INSTANCE_ID
    【解决方案3】:

    要查看每个容器的日志占用了多少空间,请使用以下命令:

    docker ps -qa | xargs docker inspect --format='{{.LogPath}}' | xargs ls -hl
    

    (您可能需要在ls 之前添加sudo)。

    【讨论】:

    • 我的权限被拒绝。
    • 最后添加 sudo 有帮助:docker ps -qa | xargs docker inspect --format='{{.LogPath}}' | xargs sudo du -hl
    【解决方案4】:
    docker inspect <containername> | grep log
    

    【讨论】:

    • grep "LogPath" 给出了确切的行,至少对于 Docker 版本 19.03.13。
    • 是的,同意,但“日志”只是令人难忘
    【解决方案5】:

    在 Windows 上,默认位置是:C:\ProgramData\Docker\containers\&lt;container-id&gt;-json.log

    【讨论】:

    • 这是运行本地容器进行开发时的那个!谢谢 - 很难找到这个信息
    【解决方案6】:

    这里是位置

    Windows 10 + WSL 2 (Ubuntu 20.04), Docker version 20.10.2, build 2291f61

    让我们说

    DOCKER_ARTIFACTS == \\wsl$\docker-desktop-data\version-pack-data\community\docker

    容器日志的位置可以在

    DOCKER_ARTIFACTS\containers\[Your_container_ID]\[Your_container_ID]-json.log

    这是一个例子

    【讨论】:

      【解决方案7】:

      要在less中直接查看日志文件,我使用:

      docker inspect $1 | grep 'LogPath' | sed -n "s/^.*\(\/var.*\)\",$/\1/p" | xargs sudo less
      

      ./viewLogs.sh CONTAINERNAME运行

      【讨论】:

        【解决方案8】:

        截至 2018 年 8 月 22 日,日志位于:

        /data/docker/containers/<container id>/<container id>-json.log
        

        【讨论】:

          【解决方案9】:

          要查看每个容器的日志大小,可以使用以下 bash 命令:

          for cont_id in $(docker ps -aq); do cont_name=$(docker ps | grep $cont_id | awk '{ print $NF }') && cont_size=$(docker inspect --format='{{.LogPath}}' $cont_id | xargs sudo ls -hl | awk '{ print $5 }') && echo "$cont_name ($cont_id): $cont_size"; done
          

          示例输出:

          container_name (6eed984b29da): 13M
          elegant_albattani (acd8f73aa31e): 2.3G
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-07-11
            • 2020-03-02
            • 2014-08-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多