elasticsearch Docker卷访问错误
我已经创建了一个Docker文件,用于在Windows Server 2016上使用Docker为Elasticsearch构建图像。创建映像非常有效,我可以使用docker run-rm-p9200:9200运行它。我可以使用容器的ip地址成功访问Elasticsearch。链接到 elasticsearch.yml文件配置日志和数据路径:
elasticsearch Docker卷访问错误,
elasticsearch,docker,
elasticsearch,Docker,我已经创建了一个Docker文件,用于在Windows Server 2016上使用Docker为Elasticsearch构建图像。创建映像非常有效,我可以使用docker run-rm-p9200:9200运行它。我可以使用容器的ip地址成功访问Elasticsearch。链接到 elasticsearch.yml文件配置日志和数据路径: cluster.name: docker-cluster network.host: 0.0.0.0 path.logs: C:/persistent/
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正确访问日志和数据文件夹?终于找到了答案。或者至少是解决办法。Java Path.toRealPath方法无法正确转换卷路径的符号链接。解决方法是将容器中的卷文件夹映射到驱动器号,并让java程序使用映射的驱动器访问它
VOLUME c:/data
RUN powershell Set-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices' -Name 'G:' -Value '\??\C:\data' -Type String