I am trying to debug my app in testing environment, my app is running in pod, I said ‘pod’ because I am not familiar with Kubernetes, its manage client looks like this:app running schematic diagram. I have learn I should set idea like this idea RUN/Debug Configurations schematic diagram. And should restart and redeploy my app, I changed Dockfile firstly. the origin instruction is FROM xxx/java:alpine VOLUME /tmp ADD recruitment.jar app.jar ENTRYPOINT ["java","-Xmx2048m","-jar","/app.jar"]
and I changed this to FROM xxx/java:alpine VOLUME /tmp ADD recruitment.jar app.jar ENTRYPOINT ["java","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005","-jar","/app.jar"]
but it always show error like this Error running 'face_remote': Unable to open debugger port (888.88.888.888[not real]:5005): java.io.IOException "handshake timeout"
. I am not sure with this ip,sicne I use ‘ping 888.88.888.888’ instruction can not success. I use this ip because Swagger request url’s domain name’s ip is this.this main enter image description here. and I guess if the app is running in docker or k8s and it will have a different Interactive mode. not same like just running in linux
2
Answers
most of the attached image are not visible.
[888.88.888.888] note sure this is correct.
-use port forwarding
ex:kubectl port-forward 5005:5005
If you have configure port forwarding then you can use localhost:5005 for debugging
I see three things that you can check:
Check the IP address:
The jar file runs inside a Docker container, which runs inside a pod. To access the pod you usually go through a service and an ingress. The ip you are using is most likely hitting the ingress/service or any other higher layer.
To attach a remote debugger, you will need to connect directly to the PodIP. One way of doing this is to first connect to your kubernetes cluster using the tool kubectl (some configuration required) and make a port forward from your pod:
kubectl port-forward my-pod-c93b8b6df-8c4aa 5005:5005
pod (as an example, the pod instance name is my-pod-c93b8b6df-8c4aa).This will open a connection from your local computer into the pod. Then you will need to identify the PodIP by
kubectl describe pods my-pod-c93b8b6df-8c4aa
and use that in IntelliJCheck if the port is exposed:
Make sure you expose the port
5005
from the pod in your test environment (similar to exposing a port when you run the container locally).How to do this depends a bit on how you are running your Kubernetes cluster. If you use Helm chart, you can just add a configuration like this in the port section of your deployment yaml:
Check debug-command address:
Last thing is to make sure you are adding the correct address in the command line option. As IntelliJ suggest in the debug editor: for JDK9+ use
…suspend=n,address=*:5005
and for JDK8 and below use…suspend=n,address=5005