如何在JIB中使用自定义用户构建Docker镜像?
解决JIB构建镜像自定义用户报错的方案
方案1:使用基础镜像中已存在的非root用户
直接指定基础镜像自带的合法用户,比如多数官方镜像(如OpenJDK、Alpine)会内置nobody或java用户。修改JIB配置如下:
jib { container { mainClass = "com.xxx.xxx.SemApplicationKt" ports = listOf("8080/tcp", "9000/tcp") user = "nobody" // 替换为基础镜像中实际存在的用户名 } // 其余配置保持不变 }
方案2:通过UID/GID指定用户(无需创建用户名)
若不需要具体用户名,直接指定UID和GID(比如通用的1000:1000,对应多数系统的普通用户权限),JIB会直接用该ID运行进程,无需passwd文件存在对应条目:
jib { container { mainClass = "com.xxx.xxx.SemApplicationKt" ports = listOf("8080/tcp", "9000/tcp") user = "1000:1000" // 格式为 UID:GID } // 其余配置保持不变 }
方案3:用extraDirectories添加用户配置文件
通过JIB的extraDirectories功能,手动将包含自定义用户的passwd和group文件注入镜像:
- 在项目根目录创建
src/jib/etc文件夹,添加以下两个文件:passwd文件新增一行:test-user:x:1000:1000::/home/test-user:/bin/bashgroup文件新增一行:test-user:x:1000:
- 修改Gradle配置:
jib { container { mainClass = "com.xxx.xxx.SemApplicationKt" ports = listOf("8080/tcp", "9000/tcp") user = "test-user" } extraDirectories { paths = listOf(file("src/jib")) permissions = mapOf( "/etc/passwd" to "644", "/etc/group" to "644" ) } // 其余配置保持不变 }
方案4:自定义基础镜像
提前构建包含目标用户的基础镜像,再在JIB配置中引用:
# 自定义基础镜像的Dockerfile FROM BASE_IMAGE RUN useradd -m test-user
构建该镜像后,修改JIB配置:
jib { from { image = "自定义基础镜像名称:版本" } container { mainClass = "com.xxx.xxx.SemApplicationKt" ports = listOf("8080/tcp", "9000/tcp") user = "test-user" } // 其余配置保持不变 }
内容的提问来源于stack exchange,提问作者user2888055
相关产品推荐
相关产品推荐

