我已经创建了一个Dockerfile,可以在Windows Server 2016上使用Docker为Elasticsearch构建图像。创建图像效果很好,我可以使用docker run --rm -p 9200:9200 <imageid>
运行它。我可以使用容器的ip地址成功访问Elasticsearch。链接到Github Project。
elasticsearch.yml文件配置日志和数据路径:
cluster.name: docker-cluster
network.host: 0.0.0.0
path.logs: C:/persistent/logs/
path.data: C:/persistent/data/
discovery.zen.minimum_master_nodes: 1
当我尝试使用卷来保存日志和主机上的数据时,我遇到了麻烦。我使用命令
创建了一个卷docker volume create elasticsearch
并运行容器:
docker run --rm -p 9200:9200 -v elasticsearch:C:\persistent <imageid>
这给了我一个java异常:
[2017-05-10T09:00:47,568][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.IllegalStateException: Unable to access 'path.logs' (C:\persistent\logs)
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:127) ~[elasticsearch-5.4.0.jar:5.4.0]
<snip>
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) ~[elasticsearch-5.4.0.jar:5.4.0]
Caused by: java.lang.IllegalStateException: Unable to access 'path.logs' (C:\persistent\logs)
at org.elasticsearch.bootstrap.Security.addPath(Security.java:413) ~[elasticsearch-5.4.0.jar:5.4.0]
<snip>
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:123) ~[elasticsearch-5.4.0.jar:5.4.0]
... 6 more
Caused by: java.nio.file.NoSuchFileException: C:\persistent\logs
at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:79) ~[?:1.8.0_131]
<snip>
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:123) ~[elasticsearch-5.4.0.jar:5.4.0]
... 6 more
奇怪的是,日志文件是在卷中创建的,并包含异常详细信息。因此,logs文件夹中的日志文件表示无法访问logs文件夹。
我尝试在主机上创建日志和数据文件夹,并让Elasticsearch创建它们。我尝试过使用两个不同的卷,一个用于日志,另一个用于数据。它们都会导致同样的错误。
我需要做些什么来使Elasticsearch能够正确访问日志和数据文件夹?
答案 0 :(得分:1)
终于找到了答案here。或者至少是解决方法。 Java Path.toRealPath()方法无法正确转换卷路径的符号链接。解决方法是&#34; map&#34;容器内的卷文件夹到驱动器号,并让java程序使用映射驱动器访问它。
VOLUME c:/data
RUN powershell Set-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices' -Name 'G:' -Value '\??\C:\data' -Type String