电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Docker 解決openjdk容器里無法使用JDK的jmap等命令問題

瀏覽:187日期:2024-11-09 10:10:08

零、問題描述

項目:Java Spring Boot 項目

Docker 環境:Docker Toolbox。不是 Windows10,用不了 Docker for Windows 只能用這個。

使用 Docker Compose 編排服務,并啟動 Mysql 和 Spring Boot 項目。

docker-compose.yml 文件內容:

version: ’2’services: mysql: build: ./docker/builds/mysql ports: - '3386:3306' volumes: - './docker/data/mysql/data:/var/lib/mysql' - './docker/data/mysql/conf:/etc/mysql/conf.d' restart: always environment: MYSQL_DATABASE: testdb MYSQL_USER: kinginblue MYSQL_PASSWORD: kinginblue MYSQL_ROOT_PASSWORD: kinginblue api: depends_on: - mysql build: ./docker/builds/api ports: - '8088:8080' volumes: - './api/target/api-0.0.1-SNAPSHOT.jar:/app/api.jar' entrypoint: - 'java' - '-jar' - '/app/api.jar' restart: always

./docker/builds/api 目錄下的 DockerFile 內容:

FROM openjdk:8

ENV LANG C.UTF-8

用的是 openjdk8。

項目部署在 CentOS 服務器上。項目偶爾會出現無響應的情況,這時理所當然要上去用 JDK 相關命令看看堆棧和GC等信息了。

進入 Java 程序所在容器:docekr-compose exec api bash,進入到 api 容器的 bash 終端。

jps 打印 Java 進程:

1 api.jar

74 Jps

嗯,jps 命令還是能正常使用的,api.jar 程序的進程號是1。

jmap 命令打印堆棧摘要信息:jmap -heap 1,然而,報錯了!

Attaching to process ID 1, please wait...Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: Can’t attach to the process: ptrace(PTRACE_ATTACH, ..) failed for 1: Operation not permittedsun.jvm.hotspot.debugger.DebuggerException: sun.jvm.hotspot.debugger.DebuggerException: Can’t attach to the process: ptrace(PTRACE_ATTACH, ..) failed for 1: Operation not permitted at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal$LinuxDebuggerLocalWorkerThread.execute(LinuxDebuggerLocal.java:163) at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.attach(LinuxDebuggerLocal.java:278) at sun.jvm.hotspot.HotSpotAgent.attachDebugger(HotSpotAgent.java:671) at sun.jvm.hotspot.HotSpotAgent.setupDebuggerLinux(HotSpotAgent.java:611) at sun.jvm.hotspot.HotSpotAgent.setupDebugger(HotSpotAgent.java:337) at sun.jvm.hotspot.HotSpotAgent.go(HotSpotAgent.java:304) at sun.jvm.hotspot.HotSpotAgent.attach(HotSpotAgent.java:140) at sun.jvm.hotspot.tools.Tool.start(Tool.java:185) at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118) at sun.jvm.hotspot.tools.JInfo.main(JInfo.java:138) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at sun.tools.jinfo.JInfo.runTool(JInfo.java:108) at sun.tools.jinfo.JInfo.main(JInfo.java:76)Caused by: sun.jvm.hotspot.debugger.DebuggerException: Can’t attach to the process: ptrace(PTRACE_ATTACH, ..) failed for 1: Operation not permitted at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.attach0(Native Method) at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.access$100(LinuxDebuggerLocal.java:62) at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal$1AttachTask.doit(LinuxDebuggerLocal.java:269) at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal$LinuxDebuggerLocalWorkerThread.run(LinuxDebuggerLocal.java:138)

以上的關鍵信息就是:Can’t attach to the process: ptrace(PTRACE_ATTACH, ..) failed for 1: Operation not permitted,操作不允許。

一、解決方案

這其實不是什么 Bug,而是 Docker 自 1.10 版本開始加入的安全特性。

類似于 jmap 這些 JDK 工具依賴于 Linux 的 PTRACE_ATTACH,而是 Docker 自 1.10 在默認的 seccomp 配置文件中禁用了 ptrace。

這篇文章介紹了整個的緣由以及應對方法:JVM in Docker and PTRACE_ATTACH

主要提及三種:

1.1 ?security-opt seccomp=unconfined

簡單暴力(不推薦),直接關閉 seccomp 配置。用法:

docker run --security-opt seccomp:unconfined ...

1.2 ?cap-add=SYS_PTRACE

使用 --cap-add 明確添加指定功能:

docker run --cap-add=SYS_PTRACE ...

1.3 Docker Compose 的支持

Docker Compose 自 version 1.1.0 (2015-02-25) 起支持 cap_add。官方文檔:cap_add, cap_drop。用法:

前面的 docker-compose.yml 改寫后文件內容如下(相同內容部分就不重復貼了):

version: ’2’services: mysql: ... api: ... cap_add: - SYS_PTRACE

補充知識:關于docker容器中使用jmap等工具報錯問題解決

首先貼出錯誤截圖:

Docker 解決openjdk容器里無法使用JDK的jmap等命令問題

錯誤產生的原因, 是因為docker 1.10版本之后 默認禁用了ptrace

解決辦法就是我們運行容器打開ptrace:

在docker-compose.yml中加入如下代碼可解決:

Docker 解決openjdk容器里無法使用JDK的jmap等命令問題

保存后運行docker-compose up -d, 然后進入容器, docker exec -it <容器名> /bin/bash

再次使用jmap等工具, 就不會報錯了。

以上這篇Docker 解決openjdk容器里無法使用JDK的jmap等命令問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Docker
相關文章:
主站蜘蛛池模板: 「银杏树」银杏树行情价格_银杏树种植_山东程锦园林 | 顶呱呱交易平台-行业领先的公司资产交易服务平台 | 东莞螺丝|东莞螺丝厂|东莞不锈钢螺丝|东莞组合螺丝|东莞精密螺丝厂家-东莞利浩五金专业紧固件厂家 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 东莞猎头公司_深圳猎头公司_广州猎头公司-广东万诚猎头提供企业中高端人才招聘服务 | 杜甫仪器官网|实验室平行反应器|升降水浴锅|台式低温循环泵 | 快速门厂家批发_PVC快速卷帘门_高速门_高速卷帘门-广州万盛门业 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | 轴承振动测量仪电箱-轴承测振动仪器-测试仪厂家-杭州居易电气 | 岩石钻裂机-液压凿岩机-劈裂机-挖改钻_湖南烈岩科技有限公司 | 论文查重_免费论文查重_知网学术不端论文查重检测系统入口_论文查重软件 | 杭州营业执照代办-公司变更价格-许可证办理流程_杭州福道财务管理咨询有限公司 | 武汉天安盾电子设备有限公司 - 安盾安检,武汉安检门,武汉安检机,武汉金属探测器,武汉测温安检门,武汉X光行李安检机,武汉防爆罐,武汉车底安全检查,武汉液体探测仪,武汉安检防爆设备 | 除尘器布袋骨架,除尘器滤袋,除尘器骨架,电磁脉冲阀膜片,卸灰阀,螺旋输送机-泊头市天润环保机械设备有限公司 | PVC快速门-硬质快速门-洁净室快速门品牌厂家-苏州西朗门业 | 股指期货-期货开户-交易手续费佣金加1分-保证金低-期货公司排名靠前-万利信息开户 | YT保温材料_YT无机保温砂浆_外墙保温材料_南阳银通节能建材高新技术开发有限公司 | 厦门网站建设_厦门网站设计_小程序开发_网站制作公司【麦格科技】 | 广西正涛环保工程有限公司【官网】| 逗网红-抖音网红-快手网红-各大平台网红物品导航 | 媒介云-全网整合营销_成都新闻媒体发稿_软文发布平台 | 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | 干式磁选机_湿式磁选机_粉体除铁器-潍坊国铭矿山设备有限公司 | Pos机办理_个人商户免费POS机申请-拉卡拉办理网 | 济南展厅设计施工_数字化展厅策划设计施工公司_山东锐尚文化传播有限公司 | 手板-手板模型-手板厂-手板加工-生产厂家,[东莞创域模型] | 隧道窑炉,隧道窑炉厂家-山东艾瑶国际贸易 | 消泡剂-水处理消泡剂-涂料消泡剂-切削液消泡剂价格-东莞德丰消泡剂厂家 | 洛阳装修公司-洛阳整装一站式品牌-福尚云宅装饰 | 电液推杆生产厂家|电动推杆|液压推杆-扬州唯升机械有限公司 | 深圳办公室装修,办公楼/写字楼装修设计,一级资质 - ADD写艺 | 楼承板-开口楼承板-闭口楼承板-无锡海逵 | 定制/定做衬衫厂家/公司-衬衫订做/订制价格/费用-北京圣达信 | 福州时代广告制作装饰有限公司-福州广告公司广告牌制作,福州展厅文化墙广告设计, | 下水道疏通_管道疏通_马桶疏通_附近疏通电话- 立刻通 | 深圳希玛林顺潮眼科医院(官网)│深圳眼科医院│医保定点│香港希玛林顺潮眼科中心连锁品牌 | 合肥通道闸-安徽车牌识别-人脸识别系统厂家-安徽熵控智能技术有限公司 | 上海心叶港澳台联考一对一培训_上海心叶港澳台联考,港澳台联考一对一升学指导 | 短信群发平台_群发短信软件_短信营销-讯鸽科技 | 房车价格_依维柯/大通/东风御风/福特全顺/江铃图片_云梯搬家车厂家-程力专用汽车股份有限公司 | 立式壁挂广告机厂家-红外电容触摸一体机价格-华邦瀛 | 好笔杆子网 - 公文写作学习交流分享平台|