How to Check Docker Logs?


Docker, a well-liked OS-level virtualization platform that permits us to ship packages in applications referred to as bins which in easy phrases are remoted environments with their very own device, libraries, and configuration recordsdata.

Like another fashionable device, logging occasions and messages like warnings and mistakes is an inherent a part of the Docker platform, which permits you to debug your packages and manufacturing problems.

We’ll be masking some easy tactics wherein you’ll organize and track logs in your bins. So let’s get began.

Docker Logs Command

The elemental syntax to fetch logs of a container is:

$ docker logs [OPTIONS] <CONTAINER-NAME OR ID>

OR

$ docker container logs [OPTIONS] <CONTAINER-NAME OR ID>

Either one of the syntaxes are necessarily the similar, so we’ll focal point on the remainder of the instructions on this article as docker logs.

Regardless that do be aware right here that the above command is most effective practical for bins which can be began with the json-file  or journald logging driving force.

Right here OPTIONS refers to the to be had supported flags with docker logs command, that are indexed underneath:

Title, Shorthand Default Description
--details Display further particulars equipped to logs.
--follow-f Observe log output
--since Display logs since timestamp (e.g. 2021-08-28T15:23:37Z) or relative (e.g. 56m for 56 mins)
--tail , -n all Choice of traces to display from the top of the logs
--timestamps, -t Display timestamps
--until API 1.35+
Display logs prior to a timestamp (e.g. 2021-08-28T15:23:37Z) or relative (e.g. 56m for 56 mins)

Instance:

$ docker playstation
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS        PORTS     NAMES
28913415ed22   nginx     "/docker-entrypoint.…"   2 seconds in the past   Up 1 2d   80/tcp    gifted_edison
$ docker logs 28913415ed22
/docker-entrypoint.sh: /docker-entrypoint.d/ isn't empty, will try to carry out configuration
/docker-entrypoint.sh: In search of 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: information: Getting the checksum of /and so forth/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: information: Enabled pay attention on IPv6 in /and so forth/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration entire; able for get started up
2021/08/28 09:02:59 [notice] 1number one: the usage of the "epoll" match manner
2021/08/28 09:02:59 [notice] 1number one: nginx/1.21.1
2021/08/28 09:02:59 [notice] 1number one: constructed by way of gcc 8.3.0 (Debian 8.3.0-6)
2021/08/28 09:02:59 [notice] 1number one: OS: Linux 5.8.0-1039-azure
2021/08/28 09:02:59 [notice] 1number one: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/08/28 09:02:59 [notice] 1number one: get started employee processes
2021/08/28 09:02:59 [notice] 1number one: get started employee procedure 31
2021/08/28 09:02:59 [notice] 1number one: get started employee procedure 32
$

Docker Logs Location

Docker, by way of default, captures the usual output (and same old error) of all of your bins and writes them in recordsdata the usage of the JSON layout. That is completed the usage of JSON Report logging driving force or json-file. Those logs are by way of default saved at container-specific places underneath /var/lib/docker filesystem.

/var/lib/docker/bins/<container_id>/<container_id>-json.log

For example, for my redis container indexed underneath, I will be able to take a look at its json logfile as proven within the snippet underneath:

$ docker playstation
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                   NAMES
551c9273bbea   redis     "docker-entrypoint.s…"   19 mins in the past   Up 19 mins   6379/tcp                                redis
6cc871763df1   nginx     "/docker-entrypoint.…"   7 hours in the past      Up 7 hours      0.0.0.0:8080->80/tcp, :::8080->80/tcp   nostalgic_wescoff
$ sudo ls -l /var/lib/docker/bins/551c9273bbea6eaf66523ed735866b9ebe6924c3b504dfeb44bef90e69d59c73/551c9273bbea6eaf66523ed735866b9ebe6924c3b504dfeb44bef90e69d59c73-json.log
-rw-r----- 1 root root 1437 Aug 28 16:53 /var/lib/docker/bins/551c9273bbea6eaf66523ed735866b9ebe6924c3b504dfeb44bef90e69d59c73/551c9273bbea6eaf66523ed735866b9ebe6924c3b504dfeb44bef90e69d59c73-json.log
$ sudo tail -10 /var/lib/docker/bins/551c9273bbea6eaf66523ed735866b9ebe6924c3b504dfeb44bef90e69d59c73/551c9273bbea6eaf66523ed735866b9ebe6924c3b504dfeb44bef90e69d59c73-json.log
"log":"1:C 28 Aug 2021 16:53:42.160 # oO0OoO0OoO0Oo Redis is beginning oO0OoO0OoO0Oon","circulate":"stdout","time":"2021-08-28T16:53:42.16031257Z"
"log":"1:C 28 Aug 2021 16:53:42.160 # Redis model=6.2.5, bits=64, devote=00000000, changed=0, pid=1, simply startedn","circulate":"stdout","time":"2021-08-28T16:53:42.160337871Z"
"log":"1:C 28 Aug 2021 16:53:42.160 # Caution: no config dossier specified, the usage of the default config. So as to specify a config dossier use redis-server /trail/to/redis.confn","circulate":"stdout","time":"2021-08-28T16:53:42.160342171Z"
"log":"1:M 28 Aug 2021 16:53:42.160 * monotonic clock: POSIX clock_gettimen","circulate":"stdout","time":"2021-08-28T16:53:42.160792578Z"
"log":"1:M 28 Aug 2021 16:53:42.161 * Working mode=standalone, port=6379.n","circulate":"stdout","time":"2021-08-28T16:53:42.161148683Z"
"log":"1:M 28 Aug 2021 16:53:42.161 # Server initializedn","circulate":"stdout","time":"2021-08-28T16:53:42.161170984Z"
"log":"1:M 28 Aug 2021 16:53:42.161 # WARNING overcommit_memory is ready to 0! Background save would possibly fail underneath low reminiscence situation. To mend this factor upload 'vm.overcommit_memory = 1' to /and so forth/sysctl.conf after which reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take impact.n","circulate":"stdout","time":"2021-08-28T16:53:42.161186984Z"
"log":"1:M 28 Aug 2021 16:53:42.161 * In a position to settle for connectionsn","circulate":"stdout","time":"2021-08-28T16:53:42.161484389Z"
$

Display Additional Main points

To turn further particulars equipped to logs, use --details flag.

Instance:

$ docker logs 6cc871763df1 --details
 /docker-entrypoint.sh: /docker-entrypoint.d/ isn't empty, will try to carry out configuration
 /docker-entrypoint.sh: In search of 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: information: Getting the checksum of /and so forth/nginx/conf.d/default.conf
 10-listen-on-ipv6-by-default.sh: information: Enabled pay attention on IPv6 in /and so forth/nginx/conf.d/default.conf
 /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
 /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
 /docker-entrypoint.sh: Configuration entire; able for get started up
 2021/08/28 10:29:05 [notice] 1number one: the usage of the "epoll" match manner
 2021/08/28 10:29:05 [notice] 1number one: nginx/1.21.1
 2021/08/28 10:29:05 [notice] 1number one: constructed by way of gcc 8.3.0 (Debian 8.3.0-6)
 2021/08/28 10:29:05 [notice] 1number one: OS: Linux 5.8.0-1039-azure
 2021/08/28 10:29:05 [notice] 1number one: getrlimit(RLIMIT_NOFILE): 1048576:1048576
 2021/08/28 10:29:05 [notice] 1number one: get started employee processes
 2021/08/28 10:29:05 [notice] 1number one: get started employee procedure 33
 2021/08/28 10:29:05 [notice] 1number one: get started employee procedure 34
 172.17.0.1 - - [28/Aug/2021:10:29:26 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
$

Observe Log Output

You’ll be able to use --follow or -f flag to keep on with the log output. This permits you to track new updates within the log circulate from incessantly STDOUT and STDERR.

Instance:

$ docker logs 6cc871763df1 -f
/docker-entrypoint.sh: /docker-entrypoint.d/ isn't empty, will try to carry out configuration
/docker-entrypoint.sh: In search of 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: information: Getting the checksum of /and so forth/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: information: Enabled pay attention on IPv6 in /and so forth/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration entire; able for get started up
2021/08/28 10:29:05 [notice] 1number one: the usage of the "epoll" match manner
2021/08/28 10:29:05 [notice] 1number one: nginx/1.21.1
2021/08/28 10:29:05 [notice] 1number one: constructed by way of gcc 8.3.0 (Debian 8.3.0-6)
2021/08/28 10:29:05 [notice] 1number one: OS: Linux 5.8.0-1039-azure
2021/08/28 10:29:05 [notice] 1number one: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/08/28 10:29:05 [notice] 1number one: get started employee processes
2021/08/28 10:29:05 [notice] 1number one: get started employee procedure 33
2021/08/28 10:29:05 [notice] 1number one: get started employee procedure 34
172.17.0.1 - - [28/Aug/2021:10:29:26 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"

Tail Logs

Container logs can also be tailed to restrict the choice of output proven at the display screen with --tail or -n flag. By means of default, this flag assumes all as an issue that presentations all the log circulate. To turn a hard and fast choice of traces from the top of the logs, specify a favorable integer quantity following --tail or -n flag.

Instance:

$ docker logs 6cc871763df1 -n 10
/docker-entrypoint.sh: Configuration entire; able for get started up
2021/08/28 10:29:05 [notice] 1number one: the usage of the "epoll" match manner
2021/08/28 10:29:05 [notice] 1number one: nginx/1.21.1
2021/08/28 10:29:05 [notice] 1number one: constructed by way of gcc 8.3.0 (Debian 8.3.0-6)
2021/08/28 10:29:05 [notice] 1number one: OS: Linux 5.8.0-1039-azure
2021/08/28 10:29:05 [notice] 1number one: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/08/28 10:29:05 [notice] 1number one: get started employee processes
2021/08/28 10:29:05 [notice] 1number one: get started employee procedure 33
2021/08/28 10:29:05 [notice] 1number one: get started employee procedure 34
172.17.0.1 - - [28/Aug/2021:10:29:26 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
$

Display Logs Since

We will restrict log output by way of the usage of --since flag and giving a timestamp like an absolute worth with syntax 2021-08-28T15:23:37Z or a relative one like 56m for 56 mins.

The --since choice presentations most effective the container logs generated after a given date. You’ll be able to specify the date as an RFC 3339 date, a UNIX timestamp, or a Pass period string (e.g. 1m30s3h). The native time zone at the consumer will probably be used if you don’t supply both a Z or a +-00:00 time zone offset on the finish of the timestamp. You’ll be able to mix the --since choice with both or either one of the --follow or --tail choices.

Instance:

$ docker logs --since=1m nostalgic_wescoff
172.17.0.1 - - [28/Aug/2021:15:19:24 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
172.17.0.1 - - [28/Aug/2021:15:19:25 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
$

Within the above instance, logs since most effective 2 mins are proven the place nostalgic_wescoff is the auto-generated identify assigned for the nginx container.

Display Logs Till

Like --since flag, docker logs additionally give a boost to --until flag, which presentations logs prior to the given timestamp. In a similar way, the timestamp follows a equivalent conference as previous and can also be specified as an absolute worth with syntax 2021-08-28T15:23:37Z or a relative one like 56m for 56 mins.

Instance:

$ docker logs --until=1h30m nostalgic_wescoff
/docker-entrypoint.sh: /docker-entrypoint.d/ isn't empty, will try to carry out configuration
/docker-entrypoint.sh: In search of 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: information: Getting the checksum of /and so forth/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: information: Enabled pay attention on IPv6 in /and so forth/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration entire; able for get started up
2021/08/28 10:29:05 [notice] 1number one: the usage of the "epoll" match manner
2021/08/28 10:29:05 [notice] 1number one: nginx/1.21.1
2021/08/28 10:29:05 [notice] 1number one: constructed by way of gcc 8.3.0 (Debian 8.3.0-6)
2021/08/28 10:29:05 [notice] 1number one: OS: Linux 5.8.0-1039-azure
2021/08/28 10:29:05 [notice] 1number one: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/08/28 10:29:05 [notice] 1number one: get started employee processes
2021/08/28 10:29:05 [notice] 1number one: get started employee procedure 33
2021/08/28 10:29:05 [notice] 1number one: get started employee procedure 34
172.17.0.1 - - [28/Aug/2021:10:29:26 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
$

Within the above instance, all logs prior to 1 hour half-hour are proven.

Display Timestamps

Many container packages be offering timestamps constructed of their log output, so Docker additionally presentations them with docker logs command. If you want Docker to explicitly prefix its timestamps within the output, use --timestamps or -t flag.

Instance:

$ docker logs -t redis
2021-08-28T16:53:42.160312570Z 1:C 28 Aug 2021 16:53:42.160 # oO0OoO0OoO0Oo Redis is beginning oO0OoO0OoO0Oo
2021-08-28T16:53:42.160337871Z 1:C 28 Aug 2021 16:53:42.160 # Redis model=6.2.5, bits=64, devote=00000000, changed=0, pid=1, simply began
2021-08-28T16:53:42.160342171Z 1:C 28 Aug 2021 16:53:42.160 # Caution: no config dossier specified, the usage of the default config. So as to specify a config dossier use redis-server /trail/to/redis.conf
2021-08-28T16:53:42.160792578Z 1:M 28 Aug 2021 16:53:42.160 * monotonic clock: POSIX clock_gettime
2021-08-28T16:53:42.161148683Z 1:M 28 Aug 2021 16:53:42.161 * Working mode=standalone, port=6379.
2021-08-28T16:53:42.161170984Z 1:M 28 Aug 2021 16:53:42.161 # Server initialized
2021-08-28T16:53:42.161186984Z 1:M 28 Aug 2021 16:53:42.161 # WARNING overcommit_memory is ready to 0! Background save would possibly fail underneath low reminiscence situation. To mend this factor upload 'vm.overcommit_memory = 1' to /and so forth/sysctl.conf after which reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take impact.
2021-08-28T16:53:42.161484389Z 1:M 28 Aug 2021 16:53:42.161 * In a position to settle for connections
$

Merge Flags

Docker provides to mix sure flags to get extra filtered output relatively than print all the log contents at the display screen. As a easy instance, we will mix --tail flag with --since to get extra limited output.

Instance:

$ docker logs --since=2h -f nostalgic_wescoff
172.17.0.1 - - [28/Aug/2021:15:19:24 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
172.17.0.1 - - [28/Aug/2021:15:19:25 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"

This may paintings with different flags as smartly.

Clear out With Shell Utilities

Linux shell utilities will also be used for extra dexterity within the log output. Utilities like grep, head, tail and so forth. can also be piped to docker logs output for extra complicated operations.

Instance:

$ docker logs --since=7h nostalgic_wescoff 2>&1 | grep GET
172.17.0.1 - - [28/Aug/2021:10:29:26 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
172.17.0.1 - - [28/Aug/2021:15:19:24 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
172.17.0.1 - - [28/Aug/2021:15:19:25 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
$

Do be aware right here that we’d like to redirect log streams to supply unmarried piped enter for grep the usage of 2>&1.

Abstract 👩‍💻

Docker is a flexible platform that provides a large number of options to administer its atmosphere. Managing logs for a gadget is likely one of the very important abilities which each gadget administrator will have to know. Managing logs in Docker is simple as soon as you realize the to be had command and conceivable flags as in step with your necessities.

For additional learn on Docker and its functionalities, refer to Docker’s documentation.

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button