我要尝试使用Docker运行ELK堆栈。我发现docker-elk已经为我设置了配置,使用
我希望将elasticsearch数据存储在主机上而不是容器中。根据docker-elk的README,我在
然而,当我运行
在查看
docker-compose
。我希望将elasticsearch数据存储在主机上而不是容器中。根据docker-elk的README,我在
docker-compose.yml
文件中的elasticsearch
部分添加了一个volumes
行:elasticsearch:
image: elasticsearch:latest
command: elasticsearch -Des.network.host=0.0.0.0
ports:
- "9200"
- "9300"
volumes:
- ../../env/elasticsearch:/usr/share/elasticsearch/data
然而,当我运行
docker-compose up
时,出现以下情况:$ docker-compose up
Starting dev_elasticsearch_1
Starting dev_logstash_1
Starting dev_kibana_1
Attaching to dev_elasticsearch_1, dev_logstash_1, dev_kibana_1
kibana_1 | Stalling for Elasticsearch
elasticsearch_1 | [2016-03-09 00:23:35,193][WARN ][bootstrap ] unable to install syscall filter: seccomp unavailable: your kernel is buggy and you should upgrade
elasticsearch_1 | Exception in thread "main" java.lang.IllegalStateException: Unable to access 'path.data' (/usr/share/elasticsearch/data/elasticsearch)
elasticsearch_1 | Likely root cause: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/elasticsearch
elasticsearch_1 | at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
elasticsearch_1 | at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
elasticsearch_1 | at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
... etc ...
在查看
../../env
后,发现已经创建了 elasticsearch
目录,但是该目录为空。如果我创建 ../../env/elasticsearch/elasticsearch
,则会出现访问错误 /usr/share/elasticsearch/data/elasticsearch/nodes
。如果创建 /nodes
,则会出现 /nodes/0
的错误,以此类推...
总之,容器似乎没有对该目录的写入权限。
我该如何获得写入权限? 我尝试过 chmod a+wx ../../env/elasticsearch
,然后它就能够创建下一个目录,但是该目录的权限为 drwxr-xr-x
,然后又卡住了。
我不喜欢以 root 身份运行此操作的想法。
docker-compose run --rm elasticsearch stat -c "%U %G" /usr/share/elasticsearch/data
的输出是什么? - kojiro