XWiki and Solr, is it possible to run them in seperated containers?

As the topic of this question says… Is it possible to use external Solr for XWiki using docker’s containers? Because actually for me it is not happening.

Hi, I see no reason why it wouldn’t work. You just need to make sure your network config is good so that xwiki inside docker container can access the solr ip address outside.

Can you show me how to do this explicitly? Because i followed instructions on GitHub - xwiki/xwiki-docker: Dockerfile to build and run XWiki on docker (Using an external Solr service) and only i am getting errors due to the problem: “Failed to create the Solr client for core with name [events]”. Connection is provided between containers because those containers are in the same network (i can also ping XWiki from Solr container) and ports are mapped towards the outside, additionally i can telnet to these ports however those applications do not want to work together if we are considering external solr.

I cannot show you as I’ve never done it.

What error do you get? “Failed to create the Solr client for core with name [events]” is only a partial error that doesn’t say what the problem is. We need the full stack trace to help you.

Here are the logs:

xwiki    | 2021-07-26 10:41:04,775 [localhost-startStop-1] ERROR o.x.s.s.i.RemoteSolr           - Failed to create the Solr client for core with name [events]
xwiki    | org.xwiki.search.solr.SolrException: Failed to get the list of field types
xwiki    |      at org.xwiki.search.solr.AbstractSolrCoreInitializer.getFieldTypes(AbstractSolrCoreInitializer.java:166)
xwiki    |      at org.xwiki.search.solr.AbstractSolrCoreInitializer.getFieldType(AbstractSolrCoreInitializer.java:403)
xwiki    |      at org.xwiki.search.solr.AbstractSolrCoreInitializer.getVersion(AbstractSolrCoreInitializer.java:390)
xwiki    |      at org.xwiki.search.solr.AbstractSolrCoreInitializer.getCurrentXWikiVersion(AbstractSolrCoreInitializer.java:366)
xwiki    |      at org.xwiki.search.solr.AbstractSolrCoreInitializer.initializeBaseSchema(AbstractSolrCoreInitializer.java:201)
xwiki    |      at org.xwiki.search.solr.AbstractSolrCoreInitializer.initialize(AbstractSolrCoreInitializer.java:150)
xwiki    |      at org.xwiki.search.solr.internal.AbstractSolr.getSynchronizedClient(AbstractSolr.java:95)
xwiki    |      at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705)
xwiki    |      at org.xwiki.search.solr.internal.AbstractSolr.getClient(AbstractSolr.java:71)
xwiki    |      at org.xwiki.search.solr.internal.DefaultSolr.getClient(DefaultSolr.java:67)
xwiki    |      at org.xwiki.eventstream.store.solr.internal.SolrEventStore.initialize(SolrEventStore.java:154)
xwiki    |      at org.xwiki.component.embed.InitializableLifecycleHandler.handle(InitializableLifecycleHandler.java:39)
xwiki    |      at org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:365)
xwiki    |      at org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)
xwiki    |      at org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)
xwiki    |      at org.xwiki.eventstream.internal.DefaultEventStore.initialize(DefaultEventStore.java:99)
xwiki    |      at org.xwiki.component.embed.InitializableLifecycleHandler.handle(InitializableLifecycleHandler.java:39)
xwiki    |      at org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:365)
xwiki    |      at org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)
xwiki    |      at org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)
xwiki    |      at org.xwiki.component.embed.EmbeddableComponentManager.getDependencyInstance(EmbeddableComponentManager.java:406)
xwiki    |      at org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:355)
xwiki    |      at org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)
xwiki    |      at org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)
xwiki    |      at org.xwiki.component.embed.EmbeddableComponentManager.getDependencyInstance(EmbeddableComponentManager.java:406)
xwiki    |      at org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:355)
xwiki    |      at org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)
xwiki    |      at org.xwiki.component.embed.EmbeddableComponentManager.getInstanceMap(EmbeddableComponentManager.java:242)
xwiki    |      at org.xwiki.component.embed.EmbeddableComponentManager.getInstanceList(EmbeddableComponentManager.java:225)
xwiki    |      at org.xwiki.observation.internal.DefaultObservationManager.initializeListeners(DefaultObservationManager.java:166)
xwiki    |      at org.xwiki.observation.internal.DefaultObservationManager.getListenersByEvent(DefaultObservationManager.java:132)
xwiki    |      at org.xwiki.observation.internal.DefaultObservationManager.notify(DefaultObservationManager.java:283)
xwiki    |      at org.xwiki.observation.internal.DefaultObservationManager.notify(DefaultObservationManager.java:337)
xwiki    |      at org.xwiki.container.servlet.XWikiServletContextListener.contextInitialized(XWikiServletContextListener.java:127)
xwiki    |      at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4763)
xwiki    |      at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5232)
xwiki    |      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
xwiki    |      at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:755)
xwiki    |      at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:729)
xwiki    |      at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:695)
xwiki    |      at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1177)
xwiki    |      at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1925)
xwiki    |      at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
xwiki    |      at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
xwiki    |      at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
xwiki    |      at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
xwiki    |      at java.base/java.lang.Thread.run(Thread.java:829)
xwiki    | Caused by: org.apache.solr.client.solrj.SolrServerException: Server refused connection at: http://localhost:8983/solr/xwiki_events
xwiki    |      at org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:672)
xwiki    |      at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:265)
xwiki    |      at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:248)
xwiki    |      at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:211)
xwiki    |      at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:228)
xwiki    |      at org.xwiki.search.solr.AbstractSolrCoreInitializer.getFieldTypes(AbstractSolrCoreInitializer.java:164)
xwiki    |      ... 46 common frames omitted
xwiki    | Caused by: org.apache.http.conn.HttpHostConnectException: Connect to localhost:8983 [localhost/127.0.0.1] failed: Connection refused (Connection refused)
xwiki    |      at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:156)
xwiki    |      at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376)
xwiki    |      at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393)
xwiki    |      at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
xwiki    |      at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
xwiki    |      at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
xwiki    |      at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
xwiki    |      at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
xwiki    |      at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
xwiki    |      at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
xwiki    |      at org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:564)
xwiki    |      ... 51 common frames omitted
xwiki    | Caused by: java.net.ConnectException: Connection refused (Connection refused)
xwiki    |      at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
xwiki    |      at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
xwiki    |      at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
xwiki    |      at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
xwiki    |      at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
xwiki    |      at java.base/java.net.Socket.connect(Socket.java:609)
xwiki    |      at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
xwiki    |      at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
xwiki    |      ... 61 common frames omitted
xwiki    | 2021-07-26 10:41:06,835 [localhost-startStop-1] ERROR o.x.s.s.i.RemoteSolr           - Failed to create the Solr client for core with name [extension_index]
xwiki    | org.xwiki.search.solr.SolrException: Failed to get the list of field types
xwiki    |      at org.xwiki.search.solr.AbstractSolrCoreInitializer.getFieldTypes(AbstractSolrCoreInitializer.java:166)
xwiki    |      at org.xwiki.search.solr.AbstractSolrCoreInitializer.getFieldType(AbstractSolrCoreInitializer.java:403)
xwiki    |      at org.xwiki.search.solr.AbstractSolrCoreInitializer.getVersion(AbstractSolrCoreInitializer.java:390)
xwiki    |      at org.xwiki.search.solr.AbstractSolrCoreInitializer.getCurrentXWikiVersion(AbstractSolrCoreInitializer.java:366)
xwiki    |      at org.xwiki.search.solr.AbstractSolrCoreInitializer.initializeBaseSchema(AbstractSolrCoreInitializer.java:201)
xwiki    |      at org.xwiki.search.solr.AbstractSolrCoreInitializer.initialize(AbstractSolrCoreInitializer.java:150)
xwiki    |      at org.xwiki.search.solr.internal.AbstractSolr.getSynchronizedClient(AbstractSolr.java:95)
xwiki    |      at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705)
xwiki    |      at org.xwiki.search.solr.internal.AbstractSolr.getClient(AbstractSolr.java:71)
xwiki    |      at org.xwiki.search.solr.internal.DefaultSolr.getClient(DefaultSolr.java:67)
xwiki    |      at org.xwiki.extension.index.internal.ExtensionIndexStore.initialize(ExtensionIndexStore.java:163)
xwiki    |      at org.xwiki.component.embed.InitializableLifecycleHandler.handle(InitializableLifecycleHandler.java:39)
xwiki    |      at org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:365)
xwiki    |      at org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)
xwiki    |      at org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)
xwiki    |      at org.xwiki.component.embed.EmbeddableComponentManager.getDependencyInstance(EmbeddableComponentManager.java:406)
xwiki    |      at org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:355)
xwiki    |      at org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)
xwiki    |      at org.xwiki.component.embed.EmbeddableComponentManager.getInstanceMap(EmbeddableComponentManager.java:242)
xwiki    |      at org.xwiki.component.embed.EmbeddableComponentManager.getInstanceList(EmbeddableComponentManager.java:225)
xwiki    |      at org.xwiki.observation.internal.DefaultObservationManager.initializeListeners(DefaultObservationManager.java:166)
xwiki    |      at org.xwiki.observation.internal.DefaultObservationManager.getListenersByEvent(DefaultObservationManager.java:132)
xwiki    |      at org.xwiki.observation.internal.DefaultObservationManager.notify(DefaultObservationManager.java:283)
xwiki    |      at org.xwiki.observation.internal.DefaultObservationManager.notify(DefaultObservationManager.java:337)
xwiki    |      at org.xwiki.container.servlet.XWikiServletContextListener.contextInitialized(XWikiServletContextListener.java:127)
xwiki    |      at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4763)
xwiki    |      at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5232)
xwiki    |      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
xwiki    |      at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:755)
xwiki    |      at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:729)
xwiki    |      at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:695)
xwiki    |      at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1177)
xwiki    |      at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1925)
xwiki    |      at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
xwiki    |      at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
xwiki    |      at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
xwiki    |      at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
xwiki    |      at java.base/java.lang.Thread.run(Thread.java:829)
xwiki    | Caused by: org.apache.solr.client.solrj.SolrServerException: Server refused connection at: http://localhost:8983/solr/xwiki_extension_index
xwiki    |      at org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:672)
xwiki    |      at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:265)
xwiki    |      at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:248)
xwiki    |      at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:211)
xwiki    |      at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:228)
xwiki    |      at org.xwiki.search.solr.AbstractSolrCoreInitializer.getFieldTypes(AbstractSolrCoreInitializer.java:164)
xwiki    |      ... 37 common frames omitted
xwiki    | Caused by: org.apache.http.conn.HttpHostConnectException: Connect to localhost:8983 [localhost/127.0.0.1] failed: Connection refused (Connection refused)
xwiki    |      at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:156)
xwiki    |      at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376)
xwiki    |      at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393)
xwiki    |      at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
xwiki    |      at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
xwiki    |      at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
xwiki    |      at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
xwiki    |      at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
xwiki    |      at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
xwiki    |      at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
xwiki    |      at org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:564)
xwiki    |      ... 42 common frames omitted
xwiki    | Caused by: java.net.ConnectException: Connection refused (Connection refused)
xwiki    |      at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
xwiki    |      at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
xwiki    |      at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
xwiki    |      at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
xwiki    |      at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
xwiki    |      at java.base/java.net.Socket.connect(Socket.java:609)
xwiki    |      at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
xwiki    |      at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
xwiki    |      ... 52 common frames omitted
xwiki    | 2021-07-26 10:41:06,856 [localhost-startStop-1] INFO  o.x.s.f.i.FilesystemStoreTools - Using filesystem store directory [/usr/local/xwiki/data/store/file]
xwiki    | 2021-07-26 10:41:07,598 [OfficeProcessThread-0] WARN  o.j.o.ConnectRetryable         - Office process died with exit code 81; restarting it
xwiki    | 2021-07-26 10:41:08,105 [localhost-startStop-1] INFO  o.x.o.i.s.DefaultOfficeServer  - Open Office instance started.
xwiki    | 26-Jul-2021 10:41:08.581 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/ROOT] has finished in [18,780] ms
xwiki    | 26-Jul-2021 10:41:08.589 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
xwiki    | 26-Jul-2021 10:41:08.598 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 19010 ms

Thanks (note: please use proper formatting next time, I’ve fixed your post ;)).

Caused by: org.apache.http.conn.HttpHostConnectException: Connect to localhost:8983 [localhost/127.0.0.1] failed: Connection refused (Connection refused)

So this was exactly what I mentioned. You need to allow it.

Okay i do understand that but unfortunately i don’t see what can i else allow… I can telnet to my localhost:8983 and here is my iptable list which seems to be alright:

-P INPUT ACCEPT
-P FORWARD DROP
-P OUTPUT ACCEPT
-N DOCKER
-N DOCKER-ISOLATION-STAGE-1
-N DOCKER-ISOLATION-STAGE-2
-N DOCKER-USER
-A INPUT -i lo -p tcp -m tcp --dport 8983 -j ACCEPT
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o br-7b1edaa4d5b8 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o br-7b1edaa4d5b8 -j DOCKER
-A FORWARD -i br-7b1edaa4d5b8 ! -o br-7b1edaa4d5b8 -j ACCEPT
-A FORWARD -i br-7b1edaa4d5b8 -o br-7b1edaa4d5b8 -j ACCEPT
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 8983 -j ACCEPT
-A DOCKER -d 172.18.0.2/32 ! -i br-7b1edaa4d5b8 -o br-7b1edaa4d5b8 -p tcp -m tcp --dport 8983 -j ACCEPT
-A DOCKER -d 172.18.0.3/32 ! -i br-7b1edaa4d5b8 -o br-7b1edaa4d5b8 -p tcp -m tcp --dport 8080 -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i br-7b1edaa4d5b8 ! -o br-7b1edaa4d5b8 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o br-7b1edaa4d5b8 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN

Have you got any ideas what kind of software may block the connection to localhost from container?Because as a user of linux i can make a telnet to the localhost:8983 however xwiki cannot make a connection to that port…