With the popularity of microservice architecture, containerization technology has become more and more popular. In many cases, we need to debug on applications running in containers in order to troubleshoot issues and optimize performance. Remote debugging in docker is a common need. This article will introduce how to remote debug in docker, as well as some problems and techniques you may encounter in the process.
1. Install debugging tools in the container
To debug in the docker container, the debugging tools must be installed in the container. Here we take the Debian system as an example container to introduce how to install debugging tools.
1. First start a Debian container:
docker run -it --name=debug debian /bin/bash
2. After entering the container, update the package list:
apt-get update
3. Install the GDB debugging tool:
apt-get install -y gdb
2. Connect the debugging tool to the application Procedure
After installing the debugging tool, we need to connect the debugging tool to the running application.
1. First, you need to enable remote debugging through environment variables when creating the container:
docker run -it -e DEBUG=true --name=myapp myimage
2. Get the PID of the application. There are many ways to get the PID of an application, such as using the Linux ps command:
ps aux | grep myapp
3. Connect the debugger to the application:
gdb -ex "set follow-fork-mode child" -p ${pid}
3. Debugging
Once connected to the application, we can start debugging. The following are some commonly used GDB commands:
1. Set breakpoint:
b [file:]function[:line]
2. Start executing the program:
r [args]
3. Single step execution:
s
4. Skip the current function:
n
5. View variables:
print var
6. Continue execution:
c
4. Troubleshoot firewall issues
During remote operation When debugging, you may need to connect through a firewall, and you may encounter port blocking issues. In this case, we can modify the EXPOSE attribute of the container to expose the required ports when starting the container.
For example, we want to expose the 3000 port of the container:
docker run -it -e DEBUG=true --name=myapp -p 3000:3000 myimage
This will allow us to access port 3000 of the container on the local machine.
5. Encountering abnormal situations
When performing remote debugging, you may encounter the following abnormal situations. Here are some solutions:
1. The container does not support GDB debugging
Some containers do not support GDB debugging because they do not have the necessary debugging information. The solution is to create a new image based on the debug version, which contains the necessary debugging information. Then debug in that image.
2. Connection refused
This may be because the firewall does not allow remote connections to the container, or the container is not configured correctly. Make sure the ports are exposed correctly and see if the container is configured correctly.
3. Unable to find debugging information
If the application does not have the correct debugging information, you may need to recompile the application and use the -debug flag to include the debugging information in the application. If you don't have access to the source code, you may need to contact the developer.
Summary
Remote debugging in docker is a very useful skill that can help us quickly troubleshoot and solve problems and improve application performance. This article introduces the basic steps for remote debugging in docker and how to solve some problems that may arise. By mastering these basic skills, you'll be able to better understand containerization technology and find and fix problems faster.
The above is the detailed content of How to debug docker remotely (debug). For more information, please follow other related articles on the PHP Chinese website!