dccker-maven 插件出现 "Failed to execute goal com.spotifydocker-maven-plugin0.4.13build....java.io.IOException Permission denied" 错误

vcjmhg 的个人博客 自律者自由 本文由博客端 https://www.vcjmhg.top 主动推送

概述

个人在使用 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

至此,问题得以圆满解决。

  • SkyWalking
    9 引用 • 6 回帖
  • 工具

    子曰:“工欲善其事,必先利其器。”

    193 引用 • 532 回帖 • 1 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    2812 引用 • 8042 回帖 • 749 关注
  • 教程
    125 引用 • 420 回帖 • 5 关注

赞助商 我要投放

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...