Sign inSign up

nixue/notjava

By nixue

Updated 3 days ago

notjava 是一个预配置权限的 Java 运行容器,基于 Amazon Corretto 构建。

Image
Languages & frameworks
Developer tools
Web servers
0

393

nixue/notjava repository overview

NotJava 使用介绍

这是什么

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 参数或应用参数

快速开始

1. 拉取镜像
docker pull nixue/notjava:17
2. 运行你的应用

把你的 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
3. 自定义 jar 包名

默认找的是 /app/NotApp.jar。如果你的 jar 叫别的名字,用环境变量覆盖:

docker run -d \
  -e APP_JAR=MyApp.jar \
  -v /宿主机/应用目录:/app \
  nixue/notjava:17
4. 追加 JVM 参数

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 环境变量覆盖。

5. 覆盖 JAVA_OPTS
docker run -d \
  -e JAVA_OPTS="-Xmx1g -Dfile.encoding=UTF-8" \
  nixue/notjava:17
6. 追加应用参数

镜像名后面直接写,$@ 会自动接住并追加:

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 / 25Amazon Linux默认版本,兼容性好
8-alpine / 11-alpine / 17-alpine / 21-alpine / 25-alpineAlpine体积小,适合精简部署

选择建议:

  • 优先 Amazon Linux 版:兼容性最好,遇到问题资料多
  • Alpine 版:镜像小,但 BusyBox 工具链和 glibc 缺失可能带来兼容问题(比如某些 native 库跑不了)

环境变量一览

变量默认值说明
APP_JARNotApp.jar要运行的 jar 包名
TZAsia/Shanghai时区
LC_ALL / LANGzh_CN.UTF-8语言编码
JAVA_OPTS-Dfile.encoding=UTF-8 -Duser.timezone=Asia/ShanghaiJVM 参数
SERVER_PORT8080应用端口(需应用自身读取该变量)
JAVA_RUNNING_IN_CONTAINERtrue容器运行标识

目录结构

/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 版)的对应关系

项目notapp(.NET)notjava
基础镜像mcr.microsoft.com/dotnet/aspnetamazoncorretto
主程序变量APP_DLLAPP_JAR
运行命令dotnet NotApp.dlljava -jar NotApp.jar
版本矩阵6.0 / 7.0 / 8.0 / ...8 / 17 / 21 / ...
用户/目录/权限一致一致

如果你已经在用 notapp,迁移到 notjava 只需要改 Dockerfile 里语言相关的几行,用户、目录、权限、VOLUME 这些设计完全一致。

Tag summary

Content type

Image

Digest

sha256:2b630b752

Size

192.7 MB

Last updated

3 days ago

docker pull nixue/notjava:25-alpine