sanakhanlibre
sanakhanlibre

Reputation: 49

Saving docker container logs with container names instead of container IDs

With the default json-file logging driver, is there a way to log rotate docker container logs with container names, instead of the container IDs?

The container IDs in the log file name look not so readable, which is when i thought of saving the logs with container names instead?

Upvotes: 1

Views: 2831

Answers (1)

BMitch
BMitch

Reputation: 263976

It's possible to configure the engine with log options to include labels in the logs:

# cat /etc/docker/daemon.json 
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3",
    "labels": "com.docker.stack.namespace,com.docker.swarm.service.name,environment"
  }
}

# docker run --label environment=dev busybox echo hello logs
hello logs
root@vm-11:/etc/docker# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
9615c898c2d2        busybox             "echo hello logs"   8 seconds ago       Exited (0) 7 seconds ago                       eloquent_germain

# docker logs --details 961
environment=dev hello logs

# more /var/lib/docker/containers/9615c898c2d2aa7439581e08c2e685f154e4bf2bb9fd5ded0c384da3242c6c9e/9615c898c2d2aa7439581e08c2e685f154e4bf2bb9fd5ded0c384da3242c6c9e-json.log
{"log":"hello logs\n","stream":"stdout","attrs":{"environment":"dev"},"time":"2020-09-22T11:12:41.279155826Z"}

You need to reload the docker engine after making changes to the daemon.json, and changes only apply to newly created containers. For systemd, reloading is done with systemctl reload docker.

To specifically pass the container name, which isn't a label, you can pass a "tag" setting:

# docker run --name test-log-opts --log-opt tag="{{.Name}}/{{.ID}}" busybox echo hello log opts
hello log opts

# docker ps -l
CONTAINER ID        IMAGE               COMMAND                 CREATED             STATUS                     PORTS               NAMES
c201d0a2504a        busybox             "echo hello log opts"   6 seconds ago       Exited (0) 5 seconds ago                       test-log-opts

# docker logs --details c20
tag=test-log-opts%2Fc201d0a2504a hello log opts

# more /var/lib/docker/containers/c201d0a2504addedb2b6785850a83e8931052d0d9778438e9dcc27391f45fec2/c201d0a2504addedb2b6785850a83e8931052d0d9778438e9dcc27391f45fec2-json.log
{"log":"hello log opts\n","stream":"stdout","attrs":{"tag":"test-log-opts/c201d0a2504a"},"time":"2020-09-22T11:15:26.998956544Z"}

For more details:

Upvotes: 3

Related Questions