How to view log output using docker-compose run?

DockerDocker Compose

Docker Problem Overview


When I use docker-compose up I can see logs for all containers in my docker-compose.yml file.

However, when I use docker-compose run app I only see console output for app but none of the services that app depends on. How can see log output for the other services?

Docker Solutions


Solution 1 - Docker

At the time of writing this the docker-compose run command does not provide a switch to see the logs of other services, hence you need to use the docker-compose logs command to see the logs you want.

Update July 1st 2019

docker-compose logs <name-of-service>

for all services

docker-compose logs

Use the following options from the documentation:

> Usage: logs [options] [SERVICE...]

> Options:

> --no-color Produce monochrome output.

> -f, --follow Follow log output.

> -t, --timestamps Show timestamps.

> --tail="all" Number of lines to show from the end of the logs > for each container.

See docker logs

You can start Docker compose in detached mode and attach yourself to the logs of all container later. If you're done watching logs you can detach yourself from the logs output without shutting down your services.

  1. Use docker-compose up -d to start all services in detached mode (-d) (you won't see any logs in detached mode)
  2. Use docker-compose logs -f -t to attach yourself to the logs of all running services, whereas -f means you follow the log output and the -t option gives you timestamps (See Docker reference)
  3. Use Ctrl + z or Ctrl + c to detach yourself from the log output without shutting down your running containers

If you're interested in logs of a single container you can use the docker keyword instead:

  1. Use docker logs -t -f <name-of-service>

Save the output

To save the output to a file you add the following to your logs command:

  1. docker-compose logs -f -t >> myDockerCompose.log

Solution 2 - Docker

If you want to see output logs from all the services in your terminal.

docker-compose logs -t -f --tail <no of lines> 

> Eg.: > Say you would like to log output of last 5 lines from all service > > docker-compose logs -t -f --tail 5

If you wish to log output from specific services then it can be done as below:

docker-compose logs -t -f --tail <no of lines> <name-of-service1> <name-of-service2> ... <name-of-service N>

> Usage: > > Eg. say you have API and portal services then you can do > something like below : > > > docker-compose logs -t -f --tail 5 portal api > > Where 5 represents last 5 lines from both logs.

Ref: https://docs.docker.com/v17.09/engine/admin/logging/view_container_logs/

Solution 3 - Docker

  1. use the command to start containers in detached mode: docker-compose up -d
  2. to view the containers use: docker ps
  3. to view logs for a container: docker logs <containerid>

Solution 4 - Docker

Unfortunately we need to run docker-compose logs separately from docker-compose run. In order to get this to work reliably we need to suppress the docker-compose run exit status then redirect the log and exit with the right status.

#!/bin/bash
set -euo pipefail
docker-compose run app | tee app.log || failed=yes
docker-compose logs --no-color > docker-compose.log
[[ -z "${failed:-}" ]] || exit 1

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsthompsView Question on Stackoverflow
Solution 1 - DockerBruno BieriView Answer on Stackoverflow
Solution 2 - DockerInvincibleView Answer on Stackoverflow
Solution 3 - Dockerakshaya pandeyView Answer on Stackoverflow
Solution 4 - DockerNathanView Answer on Stackoverflow