解决docker启动容器错误:docker:Error response from daemon:OCI runtime create failed
作者:阿亮_1024
用于搜索引擎抓取
docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: rootfs_linux.go:76: mounting “/mydata/elasticsearch/config/elasticsearch.yml” to rootfs at “/usr/share/elasticsearch/config/elasticsearch.yml” caused: mount through procfd: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.
使用docker run 运行容器一直报这个错误,其实原因很简单,如果你英语好一点就能够很快解决而不至于像我一样百度半天找不到想要的答案。
报错信息的前半部分出现了两个路径“/mydata/elasticsearch/config/elasticsearch.yml”和“/usr/share/elasticsearch/config/elasticsearch.yml”,前一个是我外部主机上的路径,后一个是docker安装的es里面的地址。
我的错误就是因为,我在外部创建/mydata/elasticsearch/config/elasticsearch.yml时,把elasticsearch.yml创建成了一个目录,挂载不上,将外部的elasticsearch.yml改成文件即可。不知道提示这个错误原因有没有其它可能。
温馨提示,如果你之前使用docker run命令来根据镜像新建容器,但是报错了,然后根据我上面说的操作了,再次重新run还是会出问题,因为你之前,docker run虽然报错了,容器没有启动起来,但是容器已经新建了,可以用docker ps -a查看,这时有两种处理方式
- 使用命令 docker rm 容器id,删除之前建的容器,然后在重新run
- 使用命令 docker start 容器id,启动你之前run报错建的容器。
后续连带错误
将上面的错误解决了之后,我使用docker run命令(已经删除了原来的容器),启动了es,如下所示
但是当我使用docker ps 查看时,并没有es,使用docker ps -a能看到刚刚创建的容器。
现在新问题变成了:使用docker run命令没有报错,但是容器并没有被启动。
我之前一直以为docker查看容器日志,只能查看已经启动的容器的日志,但是这次我发现,未启动状态的容器,也是能查看日志的。
使用命令:
docker logs 容器名
哦豁,现在又有新问题了:
java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes。
这个路径提示的是 容器里面,也就是es内的路径,但其实不是。
问题是提示的这个路径所挂载的外部路径,权限不足。
我直接给最高权限777
OK,至此问题完美解决
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。