docker 安装solr 导入mysql时报错

出于对分词兴趣,研究下solr,遇到以下这个问题:

Dockerfile

FROM solr:7.5.0
WORKDIR /opt/solr/server/solr
RUN mkdir test \
 && cp /opt/solr/dist/solr-dataimporthandler-7.5.0.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib \ 
 && cp /opt/solr/dist/solr-dataimporthandler-extras-7.5.0.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib
COPY mysql-connector-java-8.0.14.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib
WORKDIR /opt/solr/server/solr/test
RUN echo 'name=test' > core.properties
RUN mkdir data
RUN cp -r ../configsets/_default/conf/ .
WORKDIR /opt/solr/server/solr/test/conf
ADD db-data-config.xml .
ADD solrconfig.xml .
ADD managed-schema .
EXPOSE 8983

solrconfig.xml

 <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">
      <str name="config">db-data-config.xml</str>
    </lst>
  </requestHandler>

managed-schema

  <field name="_version_" type="plong" indexed="false" stored="false"/>
  <field name="_root_" type="string" indexed="true" stored="false" docValues="false" />
  <field name="_text_" type="text_general" indexed="true" stored="false" multiValued="true"/>
 <field name="id"  type="string" indexed="true" stored="true" required="true" multiValued="false" />
  <field name="str"  type="string" indexed="true" stored="false" />
  <field name="str1"  type="string" indexed="true" stored="false" />

db-data-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
    <dataSource 
     type="JdbcDataSource"
     name="source1"
     driver="com.mysql.jdbc.Driver"
     url="jdbc:mysql://127.0.0.1:3306/test" 
     user="root"
     password="mi" 
     batchSize="-1" />
    <document>
        <entity 
        name="test" 
        dataSource="source1" 
        query="select * from test"
        >
          <field column="id" name="id" />
          <field column="str" name="str" />
          <field column="str1" name="str1" />
        </entity>
    </document>
</dataConfig>

数据库在宿主机上
看错误是没连接上mysql,想问下哪部出错呢。

点击全部导入报错

Exception while processing: test document : SolrInputDocument(fields: []):org.apache.solr.handler.dataimport.DataImportHandlerException: Unable to execute query: select * from test Processing Document # 1
    at org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow(DataImportHandlerException.java:69)
    at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.<init>(JdbcDataSource.java:327)
    at org.apache.solr.handler.dataimport.JdbcDataSource.createResultSetIterator(JdbcDataSource.java:288)
    at org.apache.solr.handler.dataimport.JdbcDataSource.getData(JdbcDataSource.java:283)
    at org.apache.solr.handler.dataimport.JdbcDataSource.getData(JdbcDataSource.java:52)
    at org.apache.solr.handler.dataimport.SqlEntityProcessor.initQuery(SqlEntityProcessor.java:59)
    at org.apache.solr.handler.dataimport.SqlEntityProcessor.nextRow(SqlEntityProcessor.java:73)
    at org.apache.solr.handler.dataimport.EntityProcessorWrapper.nextRow(EntityProcessorWrapper.java:267)
    at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:476)
    at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:415)
    at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:330)
    at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:233)
    at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:424)
    at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:483)
    at org.apache.solr.handler.dataimport.DataImporter.lambda$runAsync$0(DataImporter.java:466)
    at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
阅读 2.5k
1 个回答

docker中的127.0.0.1和主机中的是不一样的,所以访问不了mysql导致,你可以设置 --network host,这个在macOS中是不起做用,建议设置宿主机 host.docker.internal 访问(18.03后支持),或者mysql也用docker,通过docker网络连接。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题