5

In the below example since I have many environment variables I cannot directly run ENTRYPOINT with java -jar command option. Instead I have used entrypoint.sh

Dockerfile

ENV JAVA_TOOL_OPTIONS -agentlib:jdwp=transport=dt_socket,address=9251,server=y,suspend=n
RUN ["chmod", "777", "entrypoint.sh"]
ENTRYPOINT ["bash","entrypoint.sh"]
EXPOSE 9251

entrypoint.sh

java $JVM_OPTS $JAVA_OPTS org.springframework.boot.loader.JarLauncher

docker-compose.yaml

version: '3.1'

services:
  bus:                                           
    image: sample-image
    network_mode: "host"
    ports:
      - 9251:9251
    environment:
      - DEBUG_PORT=9251
      - JVM_OPTS=-Xms1G -Xmx5G -XX:MaxMetaspaceSize=512m -XX:+UseG1GC

In the below snapshot we can see when the service is started with debugging enabled enter image description here

when running sudo netstat -tulpn | grep :9251 shows

The docker is running in a linux box which I am trying to connect from local windows machine. Also note that it is mandatory that I need to keep the network_mode as host.

enter image description here

enter image description here

1 Answer 1

9

Docker part:

Can you try to remove a host network mode? And check whether it works.

Alternatively I don't see a reason to use port forwarding here, these two configurations are kind of mutually exclusive.

From the documentation:

If you use the host network mode for a container, that container’s network stack is not isolated from the Docker host (the container shares the host’s networking namespace), and the container does not get its own IP-address allocated. For instance, if you run a container which binds to port 80 and you use host networking, the container’s application is available on port 80 on the host’s IP address.

And then:

Note: Given that the container does not have its own IP-address when using host mode networking, port-mapping does not take effect, and the -p, --publish, -P, and --publish-all option are ignored

So bottom line you should not deal with port forwarding in the network-mode=host and just make sure that your port is available on the host machine.

Java part:

It looks like your "java" part is ok, however it has a nuance: depending on the actual java version the remote server options slightly change:

For example in java 11 you should use:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:9251

And in java 8:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=:9251

Note the "*" that has changed. So you should try that...

Sign up to request clarification or add additional context in comments.

1 Comment

Issue resolved after adding "*" as you have suggested since i was using jre11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.