dccker-maven插件出現"Failed to execute goal com.spotifydocker-maven-plugin0.4.13build....java.io.IOException Permission denied"錯誤


概述

個人在使用docker-maven-plugin來構建鏡像的時候出現了permission deny的錯誤,具體錯誤日志如下所示:

[ERROR] Failed to execute goal com.spotify:docker-maven-plugin:0.4.13:build (default-cli) on project tomcat-container: Exception caught: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: java.io.IOException: Permission denied -> [Help 1]'
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR]'
[ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException 
[ERROR] 
[ERROR] After correcting the problems, you can resume the build with the command 
[ERROR] mvn <goals> -rf :tomcat-container

按照通常經驗來說出現權限不足錯誤的時候,我們直接切換到root用戶下邊來執行該問題一般都可以被解決,但是我在實際操作的過程中,發現在切換到root用戶后執行該插件會一直被阻塞(筆者所用操作系統:deepin 20 beta)。經過苦苦探尋,最終找到了解決該問題的方法。分享於此,希望能夠同樣遇到該錯誤的小伙伴以幫助。

解決方法

首先,因為以root用戶權限執行會出現直接阻塞的問題,因此考慮能否給普通用戶以docker的執行權限,此時我考慮到可以將當前用戶之間添加到docker的用戶組中,這樣問題應該就能解決。因此我執行了如下命令:

#切換到root用戶,如果不想切換可以在執行下邊每一個命令的時候,前邊都加上sudo
su root 
# 將vcjmhg加入到docker用戶組中
usermod -a -G docker vcjmhg 
# 重啟dokcer
service docker restart 
#測試 docker能否正常使用
docker ps

但是我在執行完前邊操作的時候,發現執行dcker ps的時候仍然會出現權限不足的錯誤,具體報錯信息如下:

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/json": dial unix /var/run/docker.sock: connect: permission denied

此時,可能就郁悶了,我已經加入到docker用戶組了為何還會出現這種錯誤???

原因在於雖然用戶加入到了docker用戶組,但是當前用戶沒有切換到docker用戶組,所以還是沒有權限。

為了解決該問題,我們考慮將當前用戶切換到docker用戶組中,來執行docker相關操作,也即必行下邊命令:

newgrp docker

執行完成之后,我們再執行docker ps 命令,發現已經可以正常的出現結果了。同時在運行插件,原來的錯誤也解決了。

升級版

經過上邊的一系列操作,從某種程度上說,我們已經解決了問題。但這個問題解決的不夠優雅。

為何這樣說那?

因為我們每次執行docker命令之前都必須先切換到docker用戶組里邊,也就是說我們每次在打開一個新的terminal的時候,我們都要先執行newgrp docker命令,這對我一個強迫症來說難以接受,因此考慮能否從docker.sock文件入手來解決該問題。

說干就干,首先我們先看一下/var/run/docker.sock的文件權限

sudo ls -al /var/run/docker.sock

執行結果如下:

srw-rw---- 1 root docker 0 Aug 25 10:09 /var/run/docker.sock

發現普通用戶是沒有權限操作該文件的,因此考慮修改文件權限,執行如下命令:

sudo chmod 666 /var/run/docker.sock

然后我們重新執行docker ps命令發現可以出現正常的結果:

Screen Capture_select-area_20200825104719

至此,問題得以圓滿解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM