notjava 是一个预配置权限的 Java 运行容器,基于 Amazon Corretto 构建。
393
notjava 是一个预配置权限的 Java 运行容器,基于 Amazon Corretto 构建。它的定位和 notapp(.NET 版)一致:开箱即用的运行环境,内置非 root 用户、中文时区、目录权限、挂载卷,你只需要把自己的 jar 包放进去就能跑。
它不是一个具体的应用,而是一个空容器模板——相当于给你准备好了一间装修好的房子,家具(你的 jar)自己搬进去。
| 特性 | 说明 |
|---|---|
| 多版本支持 | Java 8 / 11 / 17 / 21 / 25 五个 LTS 大版本,每个版本有 Amazon Linux 和 Alpine 两种基础系统 |
| 非 root 运行 | 默认创建 UID/GID 1000 的 appuser,以普通用户身份启动,符合容器安全最佳实践 |
| 中文环境 | 时区 Asia/Shanghai,语言 zh_CN.UTF-8,JVM 编码 UTF-8 |
| 预置目录 | /app/Bin、/app/Log、/app/Temp 已建好,权限 775 |
| 数据卷 | /app 声明为 VOLUME,方便挂载宿主机目录 |
| 端口 8080 | 默认暴露 8080 |
| 参数透传 | ENTRYPOINT 支持追加参数,docker run 时可以直接传 JVM 参数或应用参数 |
docker pull nixue/notjava:17
把你的 jar 包放到容器里,然后启动:
docker run -d \
--name myapp \
-p 8080:8080 \
-v /宿主机/你的应用目录:/app \
nixue/notjava:17
容器会自动执行:
java -Dfile.encoding=UTF-8 -Duser.timezone=Asia/Shanghai -jar NotApp.jar
默认找的是 /app/NotApp.jar。如果你的 jar 叫别的名字,用环境变量覆盖:
docker run -d \
-e APP_JAR=MyApp.jar \
-v /宿主机/应用目录:/app \
nixue/notjava:17
ENTRYPOINT 支持参数透传,docker run 里在镜像名后面加的都会被附加到 java 命令上:
docker run -d \
nixue/notjava:17 \
-Xmx512m -Xms256m
最终执行的是:
java -Dfile.encoding=UTF-8 -Duser.timezone=Asia/Shanghai -jar NotApp.jar -Xmx512m -Xms256m
注意:这样传的参数在
-jar之后,会被当作应用参数而不是 JVM 参数。如果要传 JVM 参数,建议用JAVA_OPTS环境变量覆盖。
docker run -d \
-e JAVA_OPTS="-Xmx1g -Dfile.encoding=UTF-8" \
nixue/notjava:17
镜像名后面直接写,$@ 会自动接住并追加:
docker run -d \
-e APP_JAR=MyApp.jar \
-p 4808:4808 \
-v /宿主机/应用目录:/app \
<你的用户名>/notjava:17 \
--server.port=4808
最终执行:
java ... -jar MyApp.jar --server.port=4808
| 标签 | 基础系统 | 说明 |
|---|---|---|
| 8 / 11 / 17 / 21 / 25 | Amazon Linux | 默认版本,兼容性好 |
| 8-alpine / 11-alpine / 17-alpine / 21-alpine / 25-alpine | Alpine | 体积小,适合精简部署 |
选择建议:
| 变量 | 默认值 | 说明 |
|---|---|---|
APP_JAR | NotApp.jar | 要运行的 jar 包名 |
TZ | Asia/Shanghai | 时区 |
LC_ALL / LANG | zh_CN.UTF-8 | 语言编码 |
JAVA_OPTS | -Dfile.encoding=UTF-8 -Duser.timezone=Asia/Shanghai | JVM 参数 |
SERVER_PORT | 8080 | 应用端口(需应用自身读取该变量) |
JAVA_RUNNING_IN_CONTAINER | true | 容器运行标识 |
/app
├── Bin # 可执行文件
├── Log # 日志
├── Temp # 临时文件
└── NotApp.jar # 你的应用(需要自己放)
这些目录已创建,属主是 appuser(UID 1000),权限 775。
这个镜像通过 GitHub Actions 自动构建,工作流支持手动触发,可以选择要构建的版本和是否推送到 Docker Hub。
如果你要自己构建:
docker build \
--build-arg JAVA_VERSION=17 \
-t notjava:17 \
NotJavaApp/
| 项目 | notapp(.NET) | notjava |
|---|---|---|
| 基础镜像 | mcr.microsoft.com/dotnet/aspnet | amazoncorretto |
| 主程序变量 | APP_DLL | APP_JAR |
| 运行命令 | dotnet NotApp.dll | java -jar NotApp.jar |
| 版本矩阵 | 6.0 / 7.0 / 8.0 / ... | 8 / 17 / 21 / ... |
| 用户/目录/权限 | 一致 | 一致 |
如果你已经在用 notapp,迁移到 notjava 只需要改 Dockerfile 里语言相关的几行,用户、目录、权限、VOLUME 这些设计完全一致。
Content type
Image
Digest
sha256:2b630b752…
Size
192.7 MB
Last updated
3 days ago
docker pull nixue/notjava:25-alpine