在使用 docker-maven-plugin 插件构建 Docker 镜像时,遇到了两个典型问题,记录排查过程与解决方案,供参考。
问题一:Connection reset by peer
错误日志
1 2 3 4 5
| [ERROR] Failed to execute goal com.spotify:docker-maven-plugin:1.2.2:build (default-cli) on project parkinglot: Exception caught: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: com.spotify.docker.client.shaded.org.apache.http.client.ClientProtocolException: Cannot retry request with a non-repeatable request entity: Connection reset by peer -> [Help 1]
|
插件配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.2.2</version> <dependencies> <dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1.1</version> </dependency> </dependencies> <configuration> <imageName>oldBookShare</imageName> <dockerDirectory>${project.basedir}</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin>
|
原因分析
Docker 镜像名称不允许包含大写字母,oldBookShare 中含有大写字母,导致请求被 Docker 守护进程拒绝并重置连接。
解决方案
将 <imageName> 中的 oldBookShare 改为全小写的 old-book-share 即可。
问题二:Permission denied
错误日志
1 2 3 4
| [ERROR] Failed to execute goal com.spotify:docker-maven-plugin:1.2.2: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]
|
原因分析
/var/run/docker.sock 是 Docker 守护进程默认监听的 UNIX 套接字文件,容器内外均可通过它与守护进程通信。默认情况下,普通用户没有该文件的读写权限。
操作系统环境:VM-20-7-debian
解决方案
第一步:查看 docker.sock 的当前权限:
1
| sudo ls -al /var/run/docker.sock
|
输出结果如下,可以看到普通用户确实没有访问权限:
1
| srw-rw---- 1 root docker 0 Dec 1 20:42 /var/run/docker.sock
|
第二步:修改文件权限,赋予所有用户读写权限:
1
| sudo chmod 666 /var/run/docker.sock
|
执行后重新运行 Maven 构建命令,即可正常工作。
注意:服务器重启后 docker.sock 的权限可能会恢复默认值,届时重新执行上述命令即可。如需永久生效,可以考虑将当前用户加入 docker 用户组:
1
| sudo usermod -aG docker $USER
|
重新登录后即可生效,无需每次手动修改权限。
参考资料:解决 docker-maven Permission denied 问题