How to clean Docker container logs?

后端 未结 7 1401
星月不相逢
星月不相逢 2020-12-23 10:47

I read my Docker container log output using

docker logs -f 

I log lots of data to the log in my node.js app via call

相关标签:
7条回答
  • 2020-12-23 11:28

    The best script I found is

    truncate -s 0 /var/lib/docker/containers/*/*-json.log;
    

    It cleans all logs and you don't need to stop the containers.

    Credit goes to https://bytefreaks.net/applications/docker/horrible-solution-how-to-delete-all-docker-logs

    0 讨论(0)
  • 2020-12-23 11:32

    This is not the ideal solution, but until Docker builds in a command to do it, this is a good workaround.

    Create a script file docker-clean-logs.sh with this content:

    #!/bin/bash
    
    rm $(docker inspect $1 | grep -G '"LogPath": "*"' | sed -e 's/.*"LogPath": "//g' | sed -e 's/",//g');
    

    Grant the execute permission to it:

    chmod +x ./docker-clean-logs.sh
    

    Stop the Docker container that you want to clean:

    docker stop <container_name>
    

    Then run the above script:

    ./docker-clean-logs.sh <container_name>
    

    And finally run your container again:

    docker start ...
    

    Credit goes to the user sgarbesi on this page: https://github.com/docker/compose/issues/1083

    0 讨论(0)
  • 2020-12-23 11:33

    Solution for a docker swarm service:

       logging:
         options:
           max-size: "10m"
           max-file: "10"
    
    0 讨论(0)
  • 2020-12-23 11:40

    If you want to remove all log files, not only for a specific container's log, you can use:

    docker system prune
    
    0 讨论(0)
  • 2020-12-23 11:45

    First, if you just need to see less output, you can have docker only show you the more recent lines:

    docker logs --since 30s -f <container_name_or_id>
    

    Or you can put a number of lines to limit:

    docker logs --tail 20 -f <container_name_or_id>
    

    To delete the logs on a Docker for Linux install, you can run the following for a single container:

    echo "" > $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)
    

    Note that this requires root, and I do not recommend this. You could potentially corrupt the logfile if you null the file in the middle of docker writing a log to the same file. Instead you should configure docker to rotate the logs.


    Lastly, you can configure docker to automatically rotate logs with the following in an /etc/docker/daemon.json file:

    {
      "log-driver": "json-file",
      "log-opts": {"max-size": "10m", "max-file": "3"}
    }
    

    That allows docker to keep up to 3 log files per container, with each file limited to 10 megs (so a limit between 20 and 30 megs of logs per container). You will need to run a systemctl reload docker to apply those changes. And these changes are the defaults for any newly created container, they do not apply to already created containers. You will need to remove and recreate any existing containers to have these settings apply.

    0 讨论(0)
  • 2020-12-23 11:45

    You can use logrotate as explained in this article

    https://sandro-keil.de/blog/2015/03/11/logrotate-for-docker-container/

    This needs to be done before launching the container.

    0 讨论(0)
提交回复
热议问题