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 <[email protected]>
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 <
[email protected]>
> 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 <[email protected]>
> > 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;"
> >
> >