1. 程式人生 > 其它 >docker啟動容器錯誤:docker: Error response from daemon: OCI runtime create failed

docker啟動容器錯誤:docker: Error response from daemon: OCI runtime create failed

用於搜尋引擎抓取

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,至此問題完美解決

轉自:www.dianjilingqu.com