将Solr Index从现有Docker容器复制到新的Docker Image中

时间:2018-02-08 23:09:27

标签: docker solr

这是我的设置。我使用docker创建了一个基本的solr容器(来自官方solr docker hub的5.5.5版)。在这个容器中,我创建了大约30000个文档。我现在要做的是创建一个新的docker solr图像,默认情况下包含这些文档。

我以为我可以将索引从现有容器中复制出来,然后通过dockerfile将其复制到我的新映像中。我通过复制它来尝试这个。

docker cp my_solr_container:/opt/solr/server/solr/core_name/data . 

然后在我的新solr映像的Dockerfile中将此数据文件夹复制到相应的文件夹中     COPY --chown = solr:solr data / opt / solr / server / solr / core_name / data /

但是当我构建图像并尝试运行它时,我收到以下错误:

3035 ERROR (coreLoadExecutor-6-thread-1) [   x:Development] o.a.s.c.CoreContainer Error creating core [Development]: Error opening new searcher
org.apache.solr.common.SolrException: Error opening new searcher
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:820)
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:658)
    at org.apache.solr.core.CoreContainer.create(CoreContainer.java:820)
    at org.apache.solr.core.CoreContainer.access$000(CoreContainer.java:90)
    at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:473)
    at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:464)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.apache.solr.common.util.ExecutorUtil$MDCAwareThreadPoolExecutor$1.run(ExecutorUtil.java:231)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.solr.common.SolrException: Error opening new searcher
    at org.apache.solr.core.SolrCore.openNewSearcher(SolrCore.java:1696)
    at org.apache.solr.core.SolrCore.getSearcher(SolrCore.java:1807)
    at org.apache.solr.core.SolrCore.initSearcher(SolrCore.java:914)
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:793)
    ... 10 more
Caused by: org.apache.lucene.index.CorruptIndexException: codec footer mismatch (file truncated?): actual footer=0 vs expected footer=-1071082520 (resource=MMapIndexInput(path="/opt/solr/server/solr/dev/data/index/_33.fdt"))
    at org.apache.lucene.codecs.CodecUtil.validateFooter(CodecUtil.java:418)
    at org.apache.lucene.codecs.CodecUtil.retrieveChecksum(CodecUtil.java:403)
    at org.apache.lucene.codecs.compressing.CompressingStoredFieldsReader.<init>(CompressingStoredFieldsReader.java:180)
    at org.apache.lucene.codecs.compressing.CompressingStoredFieldsFormat.fieldsReader(CompressingStoredFieldsFormat.java:121)
    at org.apache.lucene.codecs.lucene50.Lucene50StoredFieldsFormat.fieldsReader(Lucene50StoredFieldsFormat.java:173)
    at org.apache.lucene.index.SegmentCoreReaders.<init>(SegmentCoreReaders.java:117)
    at org.apache.lucene.index.SegmentReader.<init>(SegmentReader.java:65)
    at org.apache.lucene.index.ReadersAndUpdates.getReader(ReadersAndUpdates.java:145)
    at org.apache.lucene.index.ReadersAndUpdates.getReadOnlyClone(ReadersAndUpdates.java:197)
    at org.apache.lucene.index.StandardDirectoryReader.open(StandardDirectoryReader.java:99)
    at org.apache.lucene.index.IndexWriter.getReader(IndexWriter.java:435)
    at org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:100)
    at org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:79)
    at org.apache.solr.core.StandardIndexReaderFactory.newReader(StandardIndexReaderFactory.java:40)
    at org.apache.solr.core.SolrCore.openNewSearcher(SolrCore.java:1660)
    ... 13 more
3046 ERROR (coreContainerWorkExecutor-2-thread-1) [   ] o.a.s.c.CoreContainer Error waiting for SolrCore to be created
java.util.concurrent.ExecutionException: org.apache.solr.common.SolrException: Unable to create core [Development]
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:192)
    at org.apache.solr.core.CoreContainer$2.run(CoreContainer.java:502)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.apache.solr.common.util.ExecutorUtil$MDCAwareThreadPoolExecutor$1.run(ExecutorUtil.java:231)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.solr.common.SolrException: Unable to create core [Development]
    at org.apache.solr.core.CoreContainer.create(CoreContainer.java:833)
    at org.apache.solr.core.CoreContainer.access$000(CoreContainer.java:90)
    at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:473)
    at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:464)
    ... 5 more
Caused by: org.apache.solr.common.SolrException: Error opening new searcher
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:820)
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:658)
    at org.apache.solr.core.CoreContainer.create(CoreContainer.java:820)
    ... 8 more
Caused by: org.apache.solr.common.SolrException: Error opening new searcher
    at org.apache.solr.core.SolrCore.openNewSearcher(SolrCore.java:1696)
    at org.apache.solr.core.SolrCore.getSearcher(SolrCore.java:1807)
    at org.apache.solr.core.SolrCore.initSearcher(SolrCore.java:914)
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:793)
    ... 10 more
Caused by: org.apache.lucene.index.CorruptIndexException: codec footer mismatch (file truncated?): actual footer=0 vs expected footer=-1071082520 (resource=MMapIndexInput(path="/opt/solr/server/solr/dev/data/index/_33.fdt"))
    at org.apache.lucene.codecs.CodecUtil.validateFooter(CodecUtil.java:418)
    at org.apache.lucene.codecs.CodecUtil.retrieveChecksum(CodecUtil.java:403)
    at org.apache.lucene.codecs.compressing.CompressingStoredFieldsReader.<init>(CompressingStoredFieldsReader.java:180)
    at org.apache.lucene.codecs.compressing.CompressingStoredFieldsFormat.fieldsReader(CompressingStoredFieldsFormat.java:121)
    at org.apache.lucene.codecs.lucene50.Lucene50StoredFieldsFormat.fieldsReader(Lucene50StoredFieldsFormat.java:173)
    at org.apache.lucene.index.SegmentCoreReaders.<init>(SegmentCoreReaders.java:117)
    at org.apache.lucene.index.SegmentReader.<init>(SegmentReader.java:65)
    at org.apache.lucene.index.ReadersAndUpdates.getReader(ReadersAndUpdates.java:145)
    at org.apache.lucene.index.ReadersAndUpdates.getReadOnlyClone(ReadersAndUpdates.java:197)
    at org.apache.lucene.index.StandardDirectoryReader.open(StandardDirectoryReader.java:99)
    at org.apache.lucene.index.IndexWriter.getReader(IndexWriter.java:435)
    at org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:100)
    at org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:79)
    at org.apache.solr.core.StandardIndexReaderFactory.newReader(StandardIndexReaderFactory.java:40)
    at org.apache.solr.core.SolrCore.openNewSearcher(SolrCore.java:1660)
    ... 13 more

我还试图通过点击网址

以另一种方式复制索引
http://host:8080/solr/replication?command=backup&location=/home/backup

在我现有的容器上,然后从容器中复制备份索引并以相同的方式复制到我的新docker镜像,但遇到了同样的错误。

从现有容器中复制数据的可行方法是什么,以便我可以使用已设置的数据构建新图像。

这是我的Dockerfile供参考:

FROM solr:5.5.5

ARG core_name="Development"
ARG core_path="/opt/solr/server/solr/dev"

COPY --chown=solr:solr schema.xml $core_path/conf/
COPY --chown=solr:solr solrconfig.xml $core_path/conf/
COPY --chown=solr:solr stopwords.txt $core_path/conf/

COPY --chown=solr:solr data $core_path/data/



USER solr
RUN echo "name=$core_name" > $core_path/core.properties

1 个答案:

答案 0 :(得分:0)

您可以使用[docker commit][1]将您创建文档的容器实例提交为新图像。