
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
本镜像由epicsoft LLC管理并持续更新,提供基于官方镜像构建的OpenJDK JDK(Java开发工具包)和JRE(Java运行时环境)Docker镜像。JDK版本适用于Java应用的构建环境(如CI/CD流水线),JRE版本适用于Java应用的运行时环境,二者均基于轻量级Alpine Linux系统,确保镜像体积小、资源占用低。
alpine官方镜像,JDK镜像基于docker:dind(Docker-in-Docker)间接依赖Alpine,均继承Alpine Linux的轻量特性。ca-certificates(证书支持)、ttf-dejavu(字体支持);jq(JSON处理工具,便于构建流程中的数据解析)。| 镜像标签组 | 基础镜像 | Java版本 | Alpine包版本 | 更新周期 |
|---|---|---|---|---|
jdk jdk21 jdk21.0.8 jdk21-latest jdk-latest | docker:28.3.2-dind(间接基于alpine:3.22.1) | JDK 21.0.8 | openjdk21-jdk-21.0.8_p9-r0 | 每周 |
jre jre21 jre21.0.8 jre21-latest jre-latest latest | alpine:3.22.1 | JRE 21.0.8 | openjdk21-jre-21.0.8_p9-r0 | 每周 |
jdk17 jdk17.0.16 jdk17-latest | docker:28.3.2-dind(间接基于alpine:3.22.1) | JDK 17.0.16 | openjdk17-jdk-17.0.16_p8-r0 | 每周 |
jre17 jre17.0.16 jre17-latest | alpine:3.22.1 | JRE 17.0.16 | openjdk17-jre-17.0.16_p8-r0 | 每周 |
jdk11 jdk11.0.28 jdk11-latest | docker:28.3.2-dind(间接基于alpine:3.22.1) | JDK 11.0.28 | openjdk11-jdk-11.0.28_p6-r0 | 每周 |
jre11 jre11.0.28 jre11-latest | alpine:3.22.1 | JRE 11.0.28 | openjdk11-jre-11.0.28_p6-r0 | 每周 |
注:旧版本可查看GitLab仓库子目录:OpenJDK 11、OpenJDK 17、OpenJDK 21。
jdk*标签)docker:dind特性,在容器内构建其他Docker镜像(需挂载Docker socket)。jre*标签、latest)使用JDK镜像在GitLab CI中构建Java项目并推送Docker镜像:
yaml# .gitlab-ci.yml stages: - build variables: VERSION: "1.0.0" exampleProjectBuild: stage: build image: epicsoft/openjdk:jdk-latest # 使用最新JDK镜像 services: - docker:dind # 启用Docker-in-Docker服务 variables: DOCKER_IMAGE: $CI_REGISTRY:$VERSION # 目标镜像地址 JAVA_JAR_PATH: build/libs # 构建产物路径 before_script: - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY # 登录私有仓库 after_script: - docker logout $CI_REGISTRY # 登出仓库 script: - ./gradlew build --warning-mode all # 执行Gradle构建 # 构建并推送应用镜像(基于JRE运行时) - docker build -t $DOCKER_IMAGE . --build-arg JAR_FILE=$JAVA_JAR_PATH/exampleProject-${VERSION}.jar --build-arg VERSION=$VERSION --build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') - docker push $DOCKER_IMAGE
使用docker run命令启动Java应用:
bash# 运行Spring Boot应用(假设当前目录有app.jar) docker run -d \ --name java-app \ -p 8080:8080 \ # 映射端口(应用端口:容器端口) -v $(pwd)/app.jar:/app.jar \ # 挂载本地jar包到容器 -e JAVA_OPTS="-Xmx512m -Xms256m" \ # 自定义JVM参数 -e JAVA_TIMEZONE="Asia/Shanghai" \ # 设置时区为上海 epicsoft/openjdk:jre-latest # 使用最新JRE镜像
通过docker-compose.yml管理多服务应用:
yaml# docker-compose.yml version: '3.8' services: java-app: image: epicsoft/openjdk:jre-latest # JRE运行时镜像 container_name: java-app restart: always # 自动重启 ports: - "8080:8080" # 端口映射 volumes: - ./app.jar:/app.jar # 挂载应用jar包 environment: - JAVA_SERVER="-server" # 启用服务器VM模式 - JAVA_DOCKER="-XX:+UseContainerSupport -XX:MaxRAMPercentage=70" # 容器内存配置(限制70%可用RAM) - JAVA_SECURITY="-Djava.security.egd=file:/dev/./urandom" # 优化随机数生成 - JAVA_ENCODING="-Dfile.encoding=UTF-8" # 设置文件编码 - JAVA_TIMEZONE="-Duser.timezone=Asia/Shanghai" # 时区配置 - JAVA_ERROR="-XX:+ExitOnOutOfMemoryError" # OOM时退出容器 - JAVA_OPTS="-Xmx1g" # 自定义JVM参数(如堆内存)
启动命令:docker-compose up -d
创建自定义应用镜像,继承本JRE镜像:
dockerfile# Dockerfile FROM epicsoft/openjdk:jre-latest # 基础镜像:最新JRE # 构建参数(可通过docker build --build-arg传入) ARG VERSION="development" ARG BUILD_DATE="development" # 镜像元数据 LABEL org.label-schema.name="exampleProject" \ org.label-schema.description="Example Java application" \ org.label-schema.version="$VERSION" \ org.label-schema.schema-version="1.0" \ org.label-schema.build-date="$BUILD_DATE" # JVM配置环境变量(可在运行时通过-e覆盖) ENV JAVA_SERVER="-server" \ # 启用服务器VM模式(优化长时间运行应用) JAVA_DOCKER="-XX:+UseContainerSupport -XX:MaxRAMPercentage=80" \ # 容器内存支持,使用80%可用RAM JAVA_SECURITY="-Djava.security.egd=file:/dev/./urandom" \ # 加速随机数生成(避免阻塞) JAVA_ENCODING="-Dfile.encoding=UTF-8" \ # 默认UTF-8编码 JAVA_TIMEZONE="-Duser.timezone=GMT" \ # 默认时区GMT JAVA_ERROR="-XX:+ExitOnOutOfMemoryError" \ # 内存溢出时退出容器 JAVA_OPTS="" # 用户自定义JVM参数(运行时追加) # 复制应用jar包(通过--build-arg JAR_FILE指定路径) ARG JAR_FILE COPY $JAR_FILE /app.jar # 暴露应用端口 EXPOSE 8080 # 启动命令(拼接所有JVM参数并执行jar包) ENTRYPOINT [ "sh", "-c", "java $JAVA_SERVER $JAVA_DOCKER $JAVA_SECURITY $JAVA_ENCODING $JAVA_TIMEZONE $JAVA_ERROR $JAVA_OPTS -jar /app.jar" ]
构建命令:
docker build -t my-java-app:1.0 --build-arg JAR_FILE=./build/libs/app.jar --build-arg VERSION=1.0 --build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') .
JRE镜像支持通过环境变量自定义JVM行为,默认值及作用如下:
| 环境变量 | 默认值 | 说明 |
|---|---|---|
JAVA_SERVER | -server | 启用服务器VM模式(优化吞吐量和长时间运行) |
JAVA_DOCKER | -XX:+UseContainerSupport -XX:MaxRAMPercentage=80 | 容器支持:自动检测容器内存限制,使用80%可用RAM |
JAVA_SECURITY | -Djava.security.egd=file:/dev/./urandom | 指定随机数生成器(避免/dev/random阻塞) |
JAVA_ENCODING | -Dfile.encoding=UTF-8 | 设置默认文件编码为UTF-8 |
JAVA_TIMEZONE | -Duser.timezone=GMT | 设置JVM时区(如Asia/Shanghai) |
JAVA_ERROR | -XX:+ExitOnOutOfMemoryError | JVM内存溢出时立即退出容器 |
JAVA_OPTS | 空 | 用户自定义JVM参数(如-Xmx1g -Xms512m) |
本镜像使用MIT许可证(仅适用于epicsoft LLC创建的文件)。第三方软件(如OpenJDK、Alpine Linux)可能遵循其各自的许可证。
以下是 epicsoft/openjdk 相关的常用 Docker 镜像,适用于 不同场景 等不同场景:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。


来自真实用户的反馈,见证轩辕镜像的优质服务