docker stop项目真的马上kill了吗?

答案:是

解决方案:

1 JVM钩子调用,在关闭前处理一些事情

2 docker发出kill命令时我们可以发一个信号让JVM调用钩子,不是直接关闭

可以验证一下:

先写个main

package com.example.miniot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MiniotApplication {

    public static void main(String[] args) {

        new MiniotApplication().check();
        SpringApplication.run(MiniotApplication.class, args);
        System.out.println(
                "主线程。。。。"
        );
//        Runtime.getRuntime().halt(2);
//        System.exit(1);
    }

    private void check() {
        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
            System.out.println(
                    "钩子 1  kill pid 也就是kill -15 pid ,将会调用钩子函数ShutdownHook,一般ShutdownHook中会进行一些操作,比如保存数据,关闭连接等"
            );
        }));

    }

}

maven package 一个包。包名自己改一下

写一个dockerfile

 ## 基础镜像java
FROM  openjdk:8
#将本地文件挂载到当前容器
VOLUME  /tmp
#复制jar文件和配置文件所在的目录到容器里
ADD  miniot1.jar  /app.jar
# ADD  conf       /conf
#声明需要暴露的端口
EXPOSE  8006
#配置容器启动后执行的命令,并指定使用项目外部的配置文件
ENTRYPOINT  ["java", "-Xms256m", "-Xmx256m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]

包和dockerfile上传到服务器或放到目录 /tmp下

docker打成镜像

docker build -t test:001 .

运行

docker run -d --name test --network host --restart=always -v /tmp/rpa-test:/tmp/rpa-test test:001

关闭

docker stop

查容器内的日志

docker logs --tail 300 -f test

另一个操作是发信息号,这里就不说了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值