2017-05-10 12 views
0

Dockerを使用してElasticsearch用の画像を構築するためのDockerファイルを作成しました。画像の作成は完全に動作し、docker run --rm -p 9200:9200 <imageid>を使用して実行できます。コンテナのIPアドレスを使用してElasticsearchに正常にアクセスできます。 Github Projectにリンクしてください。Docker Volume Access Error

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 

をボリュームを作成し、コンテナを実行します。奇妙なことは、ログファイルが作成されていることである

[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 

docker run --rm -p 9200:9200 -v elasticsearch:C:\persistent <imageid> 

私にJavaの例外を与えますボリュームには例外の詳細が含まれています。ログフォルダのログファイルには、ログフォルダにアクセスできないというメッセージが表示されます。

私は、ログとデータフォルダをホスト上に作成し、Elasticsearchでそれらを作成しようとしました。私は2つの異なるボリュームを使用しようとしました.1つはログ用、もう1つはデータ用です。それらはすべて同じエラーになります。

ログとデータフォルダがElasticsearchに正しくアクセスできるようにするためには、何が必要ですか?

答えて

1

最後に答えがhereでした。または、少なくとも回避策。 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