elasticsearch Docker卷访问错误,elasticsearch,docker,elasticsearch,Docker" /> elasticsearch Docker卷访问错误,elasticsearch,docker,elasticsearch,Docker" />

elasticsearch Docker卷访问错误

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/

我已经创建了一个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/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