🗒️Docker tini start Java

type
status
slug
date
tags
summary
category
password
icon

tini

tini
krallinUpdated Jul 2, 2025
tini 容器init 是一个最小化的 init 系统,运行在容器内部,用于启动一个子进程,并等待进程退出时清理僵尸和执行信号转发。 这是一个替代庞大复杂的systemd体系的解决方案,已经集成到Docker 1.13中,并包含在Docker CE的所有版本。
Tini的优点:
  • tini可以避免应用程序生成僵尸进程
  • tini可以处理Docker进程中运行的程序的信号,例如,通过Tini, SIGTERM 可以终止进程,不需要你明确安装一个信号处理器

不用tini问题

Docker打包Java后台服务镜像,启动命令样式为:java -jar ****.jar
启动的PID为1,java的一些命令(jmap,jstack...)是无法使用到1进程的
PID 1~5是Linux的特殊进程。
序号
pid进程号
描述
1
1
init进程,系统启动的第一个用户级进程,是其他所有进程的父进程,引导用户空间服务
2
2
kthreadd,内核线程管理
3
3
migration,用于进程在不同CPU间迁移
4
4
ksoftirqd,内核中软中断守护线程,用于系统空闲时定时处理软中断事务
5
5
watchdog,看门狗进程,用于监听内核异常,当系统出现宕机时,可利用watchdog记录宕机时堆栈信息

Dockerfile

Java使用tini

避免java应用作为第一个启动的应用。添加tini,作为第一个启动的应用。
  • 使用openjdk:8-jdk-alpine作为基础镜像
  • 运行apk add --no-cache tini
  • 添加tini作为第一个运行的参数[“tini”, “java”, “-jar”, “/tutorial.jar”, “&”]

Dockerfile

打包启动

资料

上一篇
SpringBoot优雅停机
下一篇
MySQL索引区分度低 特殊情况执行扫表CPU100%
Loading...
文章列表
王小扬博客
Git
AI
产品
film
AI Code
Java
其他
计算机网络
DB
云原生
Node
Docker
操作系统
Elasticsearch
Apollo
Nestjs
Think
大前端
PHP
软件开发
设计
生活技巧
CI
缓存