事情是这样的,我是采用elascticsearch.yml配置文件+elasticsearch:7.5.0镜像的方式来启动elasticsearch服务的,我的elasticsearch.yml的配置文件如下图所示:
我也下载安装了elasticsearch:7.5.0的镜像资源,然后我打算通过以下命令启动elastcisearch容器进而启动es服务,
docker run -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d \
-p 9200:9200 -p 9300:9300 \
-v /data/es/config/es.yml:/data/share/elasticsearch/config/elasticsearch.yml \
-v /data/es/data:/data/share/elasticsearch/data \
--name ES \
elasticsearch:7.5.0
就在这个时候错误发生了,
报错:具体的报错信息就是:docker: Error response from daemon: error creating overlay mount to /data/docker/overlay2/4990314e174cb3d6cd0d51af63da5bacab46c8f77c7dcc23ee782bf323c6ae4f-init/merged: no such file or directory.
原因:可能是因为之前安装elasticsearch失败了,然后我在卸载es的时候,使用find / -name elasticsearch.yml查找了下/data/docker/overlay2/下的容器文件,然后把与es有关的容器文件删除了,然而这其中可能包含了es的相关配置文件(有的es容器文件应该是下载elasticsearch:7.5.0镜像的时候一块儿被下载或者被加载成为docker容器文件的)。有的与es有关的容器文件是不能删除的(因为有的容器文件可能包含与es镜像有关的配置文件),此外,也是没有必要删除这些与es相关的容器文件的,因为使用docker stop ES
和docker rmi ES -f
删除es容器的时候很多与es相关的容器文件就自动删除了,所以没有必要自己手动删除es相关的容器文件。
解决方案:1、卸载本地docker仓库中的es镜像(elasticsearch:7.5.0),重新下载elasticsearch:7.5.0镜像,这样的话一些缺失的es容器文件会自动加载进来。(这种方法之前是有效的,我自己也是成功过的,但是不知道为什么之后就没有作用了)
2、卸载本地docker仓库中的es镜像(elasticsearch:7.5.0),重新下载elasticsearch:7.6.0
镜像,即更换了一个镜像版本。这个时候启动es服务的命令也要稍作修改:
docker run -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d \
-p 9200:9200 -p 9300:9300 \
-v /data/es/config/es.yml:/data/share/elasticsearch/config/elasticsearch.yml \
-v /data/es/data:/data/share/elasticsearch/data \
--name ES \
elasticsearch:7.6.0
通过这两种解决方案,这个问题应该就能够处理解决了。
说明:不要使用docker pull elasticsearch:7.5.0
命令拉取镜像,因为有的时候这个镜像的下载速度太慢,我推荐大家下载拉取国内镜像源下的es镜像,命令为docker pull docker.elastic.co/elasticsearch/elasticsearch:7.5.0
。