Thanks. The issue turned out to be little different that expected. My IntelliJ was on a Windows (my main operating system). Solr was running inside a docker container inside Debian VM hosted on my Windows operating system. Debug server that runs inside the docker container will accept connections only from locahost (container itself). In order for the debug server to accept the connections made from Intellij (which is on a different host, it is neither running inside docker container nor inside Debian VM, it is running on Windows host machine), in the command line arguments for JVM,
instead of -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 we need to pass -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 Notice the wildcard usage for address parameter. It tells the debug server to accept connections from any host. Thanks for all the help. On Mon, Jan 13, 2020 at 2:56 PM Edward Ribeiro <edward.ribe...@gmail.com> wrote: > Hi, > > I was able to connect my IDE to Solr running on a container by using the > following command: > > command: > > bash -c "solr start -c -f -a > -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005;" > > It starts SolrCloud ( -c ) and listens on foreground ( -f ) so you don't > need to resort to tail -f. > > OTOH, I understand that you want to run the commands below after the > container is up and Solr is accepting connections: > > wait-for-solr.sh; > solr create -c data_core -d /var/lib/solr/data_core; > > IMHO, you could put those commands in a bash script (setup.sh in my > example) and start them first in background. Therefore, while the setup.sh > script is attempting to connect to Solr the server is starting in > foreground: > > command: > > bash -c "./myscript.sh& exec solr start -c -f -a > -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005; " > > See that there's an 'exec' keyword between the script and the solr > launching command. > > Best, > Edward > > On Mon, Jan 13, 2020 at 3:09 PM Arnold Bronley <arnoldbron...@gmail.com> > wrote: > > > > Thanks for your helpful replies, guys. > > > > @Edward: you were correct. I forgot to export 5005 port in YAML. After > > exporting this port, I am at least able to see the process with following > > command (I was not able to see it before): > > > > gnandre@gnandre-deb9-64:/sandbox/gnandre/mw-ruby-development-server$ > sudo > > lsof -i tcp:5005 > > COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME > > docker-pr 181928 root 4u IPv6 91702195 0t0 TCP *:5005 (LISTEN) > > > > However, even after this, it is not working. i.e. I am not able to > connect > > to the debug session from IntelliJ. It still throws connection refused > > error as it did previously. > > > > Here is the full Solr setting now: > > > > solr: > > build: > > context: ${DEV_ENV_ROOT}/solr/docker > > dockerfile: Dockerfile.development > > args: > > DEV_ENV_USER_ID: ${DEV_ENV_USER_ID} > > networks: > > - default > > ports: > > - "8983:8983" > > - "9983:9983" > > - "5005:5005" > > environment: > > - SOLR_HEAP=2048m > > command: > > > bash -c "solr start -a > > "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005" > -cloud > > -s /var/lib/solr -t /var/data/solr; set -x; export; wait-for-solr.sh; > > > > solr create -c data_core -d /var/lib/solr/data_core; > > tail -f /var/log/solr/solr.log" > > > > @Martijn: As you can see in the setting above, the tail command does not > > let container exit. I had to start Solr in background otherwise I cannot > > run command to create collection after it if Solr is started in > foreground. > > > > I tried both the settings that you have given above. I see the ' > Listening > > for transport dt_socket at address: 5005' statement in the startup logs. > I > > can also see that there is a process running on this port. > > gnandre@gnandre-deb9-64:/sandbox/gnandre/mw-ruby-development-server$ > sudo > > lsof -i tcp:5005 > > COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME > > docker-pr 181928 root 4u IPv6 91702195 0t0 TCP *:5005 (LISTEN) > > > > but if I try to connect it with telnet command directly from the Debian > > machine then it fails > > gnandre@gnandre-deb9-64:/sandbox/gnandre/mw-ruby-development-server$ > telnet > > localhost 5005 > > Trying 127.0.0.1... > > Connected to localhost. > > Escape character is '^]'. > > Connection closed by foreign host. > > > > if I use the Debian machine name on which this docker instance is > running, > > it still fails but with different error: > > gnandre@gnandre-deb9-64:/sandbox/gnandre/mw-ruby-development-server$ > sudo > > lsof -i tcp:5005 > > (failed reverse-i-search)`telent ': ^Clnet localhost 5005 > > gnandre@gnandre-deb9-64:/sandbox/gnandre/mw-ruby-development-server$ > telnet > > gnandre-deb9-64 5005 > > Trying 172.28.155.62... > > telnet: Unable to connect to remote host: Connection refused > > > > I used telnet command to test the debug port. I also tried to connect the > > debugging session from IntelliJ and it fails with the same issue. i.e. > > Connection refused. This is was the same error that I was getting in the > > first place. > > > > Any more suggestions? > > > > > > > > On Sat, Jan 11, 2020 at 10:15 AM Martijn Koster < > mak-luc...@greenhills.co.uk> > > wrote: > > > > > I think you may have a quoting issue there: remove those inner ones. > Not > > > that it should matter in this instance. > > > I’m not sure why you’re using “start”, which will run solr in the > > > background, or what you expect to happen after the wait-for-solr.sh — > if it > > > all worked as you expected that would wait for solr, then exit, > destroying > > > the container. > > > > > > This seems to work: > > > > > > version: '3.3' > > > services: > > > solr1: > > > container_name: solr1 > > > image: solr:8.4 > > > ports: > > > - "8981:8983” > > > - "5005:5005” > > > command: bash -c "solr-fg -a > > > -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005” > > > > > > Or even just: > > > > > > version: ‘3.3' > > > services: > > > solr1: > > > container_name: solr1 > > > image: solr:8.4 > > > ports: > > > - "8981:8983” > > > - "5005:5005” > > > environment: > > > - > > > > > "SOLR_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005” > > > > > > The thing to look for in the logs is: solr1 | Listening for > transport > > > dt_socket at address: 5005 > > > > > > BTW, when looking at these sort of subtleties, it’s always useful to > exec > > > into the container, and run `tr '\000' '\n' </proc/10/cmdline` (where > 10 is > > > the pid of java in your container, doublecheck with `ps -eflwww`), to > make > > > sure it’s running with the arguments you expect it to. > > > > > > — Martijn > > > > > > > On 10 Jan 2020, at 23:42, Arnold Bronley <arnoldbron...@gmail.com> > > > wrote: > > > > > > > > bash -c "solr start -a > > > > "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005" > > > -cloud > > > > -s /var/lib/solr -t /var/data/solr; set -x; export; > wait-for-solr.sh;" > > > > > > >