Jib Gradle插件+静态Docker客户端构建镜像遇权限错误排查
问题:Jib Gradle插件构建Docker镜像时权限错误(Windows+WSL2 dockerd)
环境配置
WSL2 侧
- 在Ubuntu 20中运行dockerd服务,监听
[::]:2375,禁用TLS(--tls=false),仅使用HTTP
Windows 侧
- 仅使用静态Docker客户端,已在
docker.exe同目录的daemon.json中添加WSL2容器动态IP到insecure-registry配置项
Intellij IDEA + Gradle 侧
- 使用Gradle 5.2.1 wrapper、Jib插件3.2.1,配置如下:
jib { dockerClient.executable = 'E:\\coding\\environment\\docker\\docker.exe' dockerClient.environment = [ DOCKER_HOST: '172.21.169.180:2375', DOCKER_INSECURE_REGISTRIES: "172.21.169.180:5000"] from.image = 'docker://mini/java@sha256:d3ded1fd0df592c33185d930d976304994bbc539c7bf70a6091cb3da0f7e11fa' to.image = 'spring-plugins-demo' container.mainClass = 'dev.westerngun.oldway.ApplicationV1' }
错误现象
已确认能成功连接WSL2中的dockerd(之前未添加IP时提示无法连接守护进程,现在可加载基础镜像并开始构建),但执行jibDockerBuild --stacktrace时出现错误:
Execution failed for task ':jibDockerBuild'. > com.google.cloud.tools.jib.plugins.common.BuildStepsExecutionException: C:\Users\WESTER~1\AppData\Local\Temp\16164656866093264693\33e3f3775358985441c3bea658f06f5307326c83f9c0bcbf8aa4acb327abffde\layer.tar: 客户端没有所需的特权。
错误翻译:A required permission is not held by the client
已排查内容
- 怀疑用户未加入
docker-user组,但已卸载Docker Toolbox,该组不存在;Windows 10家庭版无“本地用户和组”功能,不确定手动创建组是否有效(Docker文档说明该组由工具自动创建并配置权限,仅创建组可能无效) - 使用
docker.exe连接WSL2并将tar文件保存到上述临时目录可正常执行,文件未损坏,排除目录权限问题 - 重命名System32中的
tar.exe后问题依旧,排除系统自带tar工具的影响
需求
解决该权限错误,完成Jib插件构建Docker镜像的流程。
内容的提问来源于stack exchange,提问作者WesternGun
相关产品推荐
相关产品推荐

