You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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文件注入镜像:

  1. 在项目根目录创建src/jib/etc文件夹,添加以下两个文件:
    • passwd文件新增一行:test-user:x:1000:1000::/home/test-user:/bin/bash
    • group文件新增一行:test-user:x:1000:
  2. 修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 09:10:16