# Learn by Fixing > Hands-on Kubernetes, Docker and Linux troubleshooting labs for DevOps and SRE engineers. ## Scenarios - [Playground](https://www.learnbyfixing.com/scenarios/playground/): A free-form sandbox with no tasks. Use it to try things out and get familiar with the platform before taking on the real challenges. - [Reloading without restarting](https://www.learnbyfixing.com/scenarios/reloading-without-restarting/): The configuration for a process needs to be reloaded, but the process cannot be restarted. Apply the new configuration with zero downtime. - [Where is it logging?](https://www.learnbyfixing.com/scenarios/where-is-it-logging/): A running process is sending its logs somewhere, but its logging configuration is not documented. Find out where it is logging. - [What is writing to this file?](https://www.learnbyfixing.com/scenarios/what-is-writing-to-this-file/): You came across a log file that you don't recognize. There's no documentation about it. Find out which process is writing to it. - [That port is already taken](https://www.learnbyfixing.com/scenarios/that-port-is-already-taken/): You can't start a server because another process is listening on the same port. Terminate that process so that the server can start successfully. - [Too much logging](https://www.learnbyfixing.com/scenarios/too-much-logging/): A program generates an excessive amount of log output by default. Make it log errors only, without modifying its code. - [Wrong version](https://www.learnbyfixing.com/scenarios/wrong-version/): After installing a new version of a program, it still shows the old version when you run it. Make the system run the new version instead of the old one. - [Program not found](https://www.learnbyfixing.com/scenarios/program-not-found/): A new program has been installed, but it is not found when you run it from the terminal. Make the system find the program. - [Errors only](https://www.learnbyfixing.com/scenarios/errors-only/): A program writes all error messages to STDERR and all other output to STDOUT. Run the program, saving all error messages and discarding all other output. - [Do not overwrite previous reports](https://www.learnbyfixing.com/scenarios/do-not-overwrite-previous-reports/): A program generates reports, sending INFO messages to STDOUT and ERROR messages to STDERR. Generate a new report and append all outputs to the log file. - [That Kubernetes secret is wrong](https://www.learnbyfixing.com/scenarios/that-kubernetes-secret-is-wrong/): A password and the Kubernetes secret generated from it don't match, even though they look correct at first glance. Figure out why and fix it. - [Exiting vi the wrong way](https://www.learnbyfixing.com/scenarios/exiting-vi-the-wrong-way/): You've opened vi and you don't know how to quit. You can't use vi commands to exit. Find another way out. - [Where shall I put the config file?](https://www.learnbyfixing.com/scenarios/where-shall-i-put-the-config-file/): A program fails to start because it can't find its config file, but the error message doesn't say where it's looking for it. - [Port already used, but which one?](https://www.learnbyfixing.com/scenarios/port-already-used-but-which-one/): A server fails to start because another process is already listening on the same port, but it doesn't specify which port it needs. - [A verbose Docker container](https://www.learnbyfixing.com/scenarios/a-verbose-docker-container/): A program in a Docker image generates too many log messages by default. Make it log ERROR messages only without modifying the image. - [Reloading without restarting the container](https://www.learnbyfixing.com/scenarios/reloading-without-restarting-the-container/): The configuration for a containerized program needs to be reloaded, but the container cannot be restarted. Apply the new configuration with zero downtime. - [Docker image is too large](https://www.learnbyfixing.com/scenarios/docker-image-is-too-large/): A Docker image was generated to deploy an app to production, but it's too large (over 1 GB). Optimize its size to be under 20 MB. - [Docker app does not start](https://www.learnbyfixing.com/scenarios/docker-app-does-not-start/): You tried to start a containerized app, but it doesn't run. A colleague says it works on their laptop. Make it run without changing the app's code. - [Broken Docker Compose file](https://www.learnbyfixing.com/scenarios/broken-docker-compose-file/): An app was set up using Docker Compose, but it doesn't start. It has 3 services: proxy, app, and database. Fix the compose.yaml file and get it running. - [Where is the database?](https://www.learnbyfixing.com/scenarios/where-is-the-database/): A containerized web application can't start because it can't connect to its database running in another container. - [The inherited Docker image](https://www.learnbyfixing.com/scenarios/the-inherited-docker-image/): A legacy Docker image has no documentation. It starts, but it's not accessible. Find on which port it is listening and expose it. - [Find the API key](https://www.learnbyfixing.com/scenarios/find-the-api-key/): Find the API key in a Docker image to prove that it's not safe to copy secrets into the image during the build process. - [Resizing a pod with zero downtime](https://www.learnbyfixing.com/scenarios/resizing-a-pod-with-zero-downtime/): The CPU resources for a third-party legacy pod need to be doubled with zero downtime. Update its resources without disrupting the service. - [ML inference workload is pending](https://www.learnbyfixing.com/scenarios/ml-inference-workload-is-pending/): An ML inference workload is stuck in the pending state, even with the right affinity defined to schedule pods on GPU nodes. - [PCI workload is not running](https://www.learnbyfixing.com/scenarios/pci-workload-is-not-running/): A critical internal application was deployed to a PCI-regulated Kubernetes cluster. The deployment process completed, but the application is not running. ## Guides - [Signals](https://www.learnbyfixing.com/guides/signals/): A guide to Linux signals: what they are, which ones are most commonly used, and how to send them to processes from the command line. - [File descriptors](https://www.learnbyfixing.com/guides/file-descriptors/): A guide to Linux file descriptors: how the kernel represents open files and sockets, and how to inspect them on a running system. - [Environment variables](https://www.learnbyfixing.com/guides/environment-variables/): A guide to environment variables in Linux, Docker and Kubernetes: what they are and how to use them in different contexts. - [Shell redirection](https://www.learnbyfixing.com/guides/shell-redirection/): A guide to shell redirection in Linux: how to redirect STDIN, STDOUT, and STDERR to files, combine streams, and suppress unwanted output. - [Pipes](https://www.learnbyfixing.com/guides/pipes/): A guide to pipes in Linux: how to chain commands together to build powerful one-liners by passing output from one program to another. - [System calls and strace](https://www.learnbyfixing.com/guides/system-calls-and-strace/): A guide to system calls and strace in Linux: how programs interact with the Linux kernel, and how to trace those interactions to debug failures. - [Signals in Docker](https://www.learnbyfixing.com/guides/docker-signals/): A guide to signals in Docker: how to send signals to processes running inside containers, and what happens when a container receives SIGTERM. - [Namespaces and nsenter](https://www.learnbyfixing.com/guides/namespaces-and-nsenter/): A guide to namespaces and nsenter in Docker: how containers use namespaces for isolation, and how to enter a container's namespace for debugging. - [Environment variables in Docker](https://www.learnbyfixing.com/guides/docker-environment-variables/): A guide to environment variables in Docker: how to pass configuration values into containers at runtime using flags and env files. - [Environment variables in Kubernetes](https://www.learnbyfixing.com/guides/kubernetes-environment-variables/): A guide to environment variables in Kubernetes: how to pass configuration values into containers running in pods using key-value pairs and config maps. - [Environment variables in Linux](https://www.learnbyfixing.com/guides/linux-environment-variables/): A guide to environment variables in Linux: how they work, how to set and inspect them, and how programs use them for configuration. - [Seccomp](https://www.learnbyfixing.com/guides/seccomp/): A guide to seccomp: what it is, how it works in Docker containers, how to use custom seccomp profiles, and how to disable it. ## Skill Paths - [File descriptors](https://www.learnbyfixing.com/skill-paths/file-descriptors/): In Linux, almost everything is a file. Learn how file descriptors work and how to use them to track open files and network connections. - [Environment variables](https://www.learnbyfixing.com/skill-paths/environment-variables/): Learn how to use environment variables in Linux to configure programs and control their behavior. - [Shell redirection](https://www.learnbyfixing.com/skill-paths/shell-redirection/): Learn how to redirect STDIN, STDOUT, and STDERR streams when running programs in the Linux shell. - [Signals](https://www.learnbyfixing.com/skill-paths/signals/): Learn how to send signals to Linux processes to control their behavior and trigger configuration reloads. - [Syscalls](https://www.learnbyfixing.com/skill-paths/syscalls/): Learn how to inspect system calls using strace to understand how programs interact with the kernel and debug hard-to-diagnose failures. - [Pipes](https://www.learnbyfixing.com/skill-paths/pipes/): Learn how to connect Linux commands using pipes to pass output from one program as input to another, building powerful one-line workflows. - [Docker fundamentals](https://www.learnbyfixing.com/skill-paths/docker-fundamentals/): Learn the fundamentals of Docker containers, including how to run and troubleshoot containerized applications. - [Docker images](https://www.learnbyfixing.com/skill-paths/docker-images/): Learn how to optimize and troubleshoot Docker images to create efficient, production-ready containers with minimal footprint. - [Docker networking](https://www.learnbyfixing.com/skill-paths/docker-networking/): Learn how to configure networking for Docker containers, enabling communication between services and exposing ports, and troubleshooting connectivity issues. - [Kubernetes fundamentals](https://www.learnbyfixing.com/skill-paths/kubernetes-fundamentals/): Learn the fundamentals of Kubernetes to understand how it works and how to troubleshoot Kubernetes issues. - [Kubernetes scheduling](https://www.learnbyfixing.com/skill-paths/kubernetes-scheduling/): Learn how to troubleshoot scheduling issues in Kubernetes including affinity and anti-affinity, node selectors, and taints and tolerations. - [Kubernetes security](https://www.learnbyfixing.com/skill-paths/kubernetes-security/): Learn how to troubleshoot security issues in Kubernetes including RBAC, network policies, and pod security standards. ## Roadmaps - [Linux](https://www.learnbyfixing.com/roadmaps/linux/): A structured path from beginner to expert in Linux troubleshooting, covering syscalls, file descriptors, signals, environment variables and shell redirection. - [Docker](https://www.learnbyfixing.com/roadmaps/docker/): A structured path from beginner to expert in Docker troubleshooting, covering container fundamentals, image optimization, networking, and Docker Compose. - [Kubernetes](https://www.learnbyfixing.com/roadmaps/kubernetes/): A structured path from beginner to expert in Kubernetes troubleshooting, covering Kubernetes fundamentals, networking, scheduling, and security. ## Pricing - [Pricing](https://www.learnbyfixing.com/pricing/) ## About - [About](https://www.learnbyfixing.com/about)