概述
個人在使用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命令發現可以出現正常的結果:

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