- If ChatGPT produces AI-generated code for your app, who does it really belong to?
- The best iPhone power banks of 2024: Expert tested and reviewed
- The best NAS devices of 2024: Expert tested
- Four Ways to Harden Your Code Against Security Vulnerabilities and Weaknesses
- I converted this Windows 11 Mini PC into a Linux workstation - and didn't regret it
Debug Containerized Apps with the AI-Assisted Signal0ne Docker Extension | Docker
Consider this scenario: You fire up your Docker containers, hit an API endpoint, and … bam! It fails. Now what? The usual drill involves diving into container logs, scrolling through them to understand the error messages, and spending time looking for clues that will help you understand what’s wrong. But what if you could get a summary of what’s happening in your containers and potential issues with the proposed solutions already provided?
In this article, we’ll dive into a solution that solves this issue using AI. AI can already help developers write code, so why not help developers understand their system, too?
Signal0ne is a Docker Desktop extension that scans Docker containers’ state and logs in search of problems, analyzes the discovered issues, and outputs insights to help developers debug. We first learned about Signal0ne as the winning submission in the 2023 Docker AI/ML Hackathon, and we’re excited to show you how to use it to debug more efficiently.
Introducing Signal0ne Docker extension: Streamlined debugging for Docker
The magic of the Signal0ne Docker extension is its ability to shorten feedback loops for working with and developing containerized applications. Forget endless log diving — the extension offers a clear and concise summary of what’s happening inside your containers after logs and states are analyzed by an AI agent, pinpointing potential issues and even suggesting solutions.
Developing applications these days involves more than a block of code executed in a vacuum. It is a complex system of dependencies, and different user flows that need debugging from time to time. AI can help filter out all the system noise and focuses on providing data about certain issues in the system so that developers can debug faster and better.
Docker Desktop is one of the most popular tools used for local development with a huge community, and Docker features like Docker Debug enhance the community’s ability to quickly debug and resolve issues with their containerized apps.
Signal0ne Docker extension’s suggested solutions and summaries can help you while debugging your container or editing your code so that you can focus on bringing value as a software engineer. The term “developer experience” is often used, but this extension focuses on one crucial aspect: shortening development time. This translates directly to increased productivity, letting you build containerized applications faster and more efficiently.
How does the Docker Desktop extension work?
Between AI co-pilots, highly integrated in IDEs that help write code, and browser AI chats that help understand software development concepts in a Q&A way, there is one piece missing: logs and runtime system data.
The Signal0ne Docker Desktop extension consists of three components: two hosted on the user’s local system (UI and agent) and one in the Signal0ne cloud backend service. The agent scans the user’s local environment in the search of containers with invalid states, runtime issues, or some warnings or errors in the logs, after issue discovery, it collects additional data from container definition for enhanced analysis.
After the Signal0ne agent discovery, data is sent to the backend service, where a combination of pre-trained LLM and solution search retrieval service performs the analysis. The analysis of the issues can be seen from the Signal0ne extension UI, including:
- Short log summary — Outlines what is happening within a particular container, including logs on which analysis was based can be accessed from the sources dropdown if you wish.
- Solutions summary — One paragraph about possible solutions to the analyzed issue with some explanation of why this particular solution was proposed.
- Solution sources — Links to websites where the issue has already been solved by the community (for example, a GitHub issue or StackOverflow post).
Watch this short video demonstration for more details:
Technical details
The issue analysis pipeline is powered by the LangChain tooling framework, which utilizes open source Mistral 7b LLM with LLM-optimized web search that browses sources of existing solutions on the open web (Figure 1).
The following section shows sample issue analysis pipeline output:
Logs from Docker container:
“$ irbn>> "12341:asdf"[/\d+/]n# => "12341" n>> "12341:asdf"[/\d*/]n# => "12341" n>> "12341:asdf"[0..5]n# => "12341:" n>> "12341:asdf"[0...5]n# => "12341" n>> "12341:asdf"[0, ':']nTypeError: can't convert String into Integern from (irb):5:in”
Summary:
The user is trying to extract a substring from the string 12341:asdf
using different Ruby methods, such as [/\\d+/], [/\\d\\*/], [0..5], [0...5], and [0, ':']
. However, when attempting to use the indexing method [0, ':'],
an error occurs because the method expects an integer argument but receives a string instead.
Predicted solutions:
“To extract a substring from the given string 12341:asdf
without encountering an error when using indexing methods, consider the following options:
1. Using regular expressions:
To extract a substring using regular expressions, you can use the scan
method with a regular expression pattern. For instance, to extract the digits before the colon, you can use the following code snippet:
str = "12341:asdf"
substring = str.scan(/[\\d]+/)
puts substring.first
# Output: ["12341"]
puts substring.first[0]
# Output: 12341
2. Slicing:
Another alternative to indexing is slicing, which allows you to extract a specified range of characters from a string. To extract the digits before the colon using slicing, you can use the following code snippet:
str = "12341:asdf"
substring = str[0...str.index(":")]
puts substring
# Output: "12341"
puts substring.to_i
# Output: 12341
These two methods should help you extract the desired substring from the given string without encountering an error.
Getting started
Getting started with the Signal0ne Docker Desktop extension is a straightforward process that allows developers to leverage the benefits of unified development.
Here are the steps for installing Signal0ne Docker extension:
1. Install Docker Desktop.
2. Choose Add Extensions in the left sidebar. The Browse tab will appear by default (Figure 2).
3. In the Filters drop-down, select the Utility tools category.
4. Find Signal0ne and then select Install (Figure 3).
5. Log in after the extension is installed (Figure 4).
6. Start developing your apps, and, if you face some issues while debugging, have a look at the Signal0ne extension UI. The issue analysis will be there to help you with debugging.
Make sure the Signal0ne agent is enabled by toggling on (Figure 5):
Figure 6 shows the summary and sources:
Proposed solutions and sources are shown in Figures 7 and 8. Solutions sources will redirect you to a webpage with predicted solution:
If you want to contribute to the project, you can leave feedback via the Like or Dislike button in the issue analysis output (Figure 9).
To explore Signal0ne Docker Desktop extension without utilizing your containers, consider experimenting with dummy containers using this docker compose
to observe how logs are being analyzed and how helpful the output is with the insights:
services:
broken_bulb: # c# application that cannot start properly
image: 'Signal0neai/broken_bulb:dev'
faulty_roger: #
image: 'Signal0neai/faulty_roger:dev'
smoked_server: # nginx server hosting the website with the miss-configuration
image: 'Signal0neai/smoked_server:dev'
ports:
- '8082:8082'
invalid_api_call: # python webserver with bug
image: 'Signal0neai/invalid_api_call:dev'
ports:
- '5000:5000'
- broken_bulb: This service uses the image
Signal0neai/broken_bulb:dev
. It’s a C# application that throws System.NullReferenceException during the startup. Thanks to that application, you can observe how Signal0ne discovers the failed container, extracts the error logs, and analyzes it. - faulty_roger: This service uses the image
Signal0neai/faulty_roger:dev
. It is a Python API server that is trying to connect to an unreachable database on localhost. - smoked_server: This service utilizes the image
Signal0neai/smoked_server:dev
. Thesmoked_server
service is an Nginx instance that is throwing 403 forbidden while the user is trying to access the root path (http://127.0.0.1:8082/). Signal0ne can help you debug that. - invalid_api_call: API service with a bug in one of the endpoints, to generate an error call http://127.0.0.1:5000/create-table after running the container. Follow the analysis of Signal0ne and try to debug the issue.
Conclusion
Debugging containerized applications can be time-consuming and tedious, often involving endless scrolling through logs and searching for clues to understand the issue. However, with the introduction of the Signal0ne Docker extension, developers can now streamline this process and boost their productivity significantly.
By leveraging the power of AI and language models, the extension provides clear and concise summaries of what’s happening inside your containers, pinpoints potential issues, and even suggests solutions. With its user-friendly interface and seamless integration with Docker Desktop, the Signal0ne Docker extension is set to transform how developers debug and develop containerized applications.
Whether you’re a seasoned Docker user or just starting your journey with containerized development, this extension offers a valuable tool that can save you countless hours of debugging and help you focus on what matters most — building high-quality applications efficiently. Try the extension in Docker Desktop today, and check out the documentation on GitHub.