当前位置: 首页 > news >正文

k8s:离线部署tomcatV11.0.9,报Cannot find /opt/bitnami/tomcat/bin/setclasspath.sh

本文记录了在离线环境下部署Tomcat容器时遇到的权限问题及解决方案。在Docker环境中运行Tomcat时出现"找不到setclasspath.sh"错误,通过添加--security-opt seccomp=unconfined参数解决。在Kubernetes环境中部署时出现相同问题,通过设置containerSecurityContext.seccompProfile.type=Unconfined解决。文章对比了Unconfined和RuntimeDefault两种seccomp

一、离线环境


CPU:Hygon C86 7285 32-core Processor
操作系统:麒麟操作系统
containerd:1.7.27
Kubernetes:1.26.12
KubeSphere:4.1.2
kubekey:3.1.10
Harbor:2.13.1

二、docker下的现象

执行如下代码:

docker run -dit \

  --name tomcat \

  -p 8084:8080 \

  -e TOMCAT_USERNAME=admin \

  -e TOMCAT_PASSWORD=Sinops1234 \

  bitnami/tomcat:latest

 报如下错误:

Cannot find /opt/bitnami/tomcat/bin/setclasspath.sh

原因:

   权限不够。

解决方案:

docker run -dit \

  --name tomcat \

  -p 8084:8080 \

  --security-opt seccomp=unconfined \

  -e TOMCAT_USERNAME=admin \

  -e TOMCAT_PASSWORD=Sinops1234 \

  bitnami/tomcat:latest

 

特性

apparmor:unconfined

seccomp=unconfined

所属模块

AppArmor

seccomp

控制内容

文件路径、网络访问、权限等

系统调用(syscalls)

用途

限制程序对系统资源的访问

限制程序能执行的底层系统操作

安全影响

更细粒度的访问控制

防止危险系统调用被执行

默认行为

Docker 会应用默认 AppArmor profile(如果启用)

Docker 默认启用 seccomp,限制部分危险 syscall

何时使用

容器无法访问特定文件或资源

容器因系统调用失败而崩溃

三、k8s下的现象 

执行如下命令:

helm install tomcat ./tomcat-12.0.0.tgz \

  --namespace default \

  --set image.registry=172.23.123.117:8443 \

  --set image.repository=library/bitnami/tomcat \

  --set image.tag=latest \

  --set image.pullPolicy=IfNotPresent \

--set image.pullSecrets=sinopsreg \

  --set global.security.allowInsecureImages=false \

  --set usePasswordFiles=false \

  --set existingSecret=tomcat-secrets \

  --set secretKeys.adminUsernameKey=tomcat-username \

  --set secretKeys.adminPasswordKey=tomcat-password

 

报如下错误:

Cannot find /opt/bitnami/tomcat/bin/setclasspath.sh

原因:

   权限不够。

解决方案:

helm install tomcat ./tomcat-12.0.0.tgz \

  --namespace default \

  --set image.registry=172.23.123.117:8443 \

  --set image.repository=library/bitnami/tomcat \

  --set image.tag=latest \

  --set image.pullPolicy=IfNotPresent \

--set image.pullSecrets=sinopsreg \

  --set global.security.allowInsecureImages=false \

  --set usePasswordFiles=false \

  --set existingSecret=tomcat-secrets \

  --set secretKeys.adminUsernameKey=tomcat-username \

  --set secretKeys.adminPasswordKey=tomcat-password \

  --set containerSecurityContext.seccompProfile.type=Unconfined

Unconfined:当你设置 seccompProfile.type: Unconfined,这意味着禁用了 Seccomp 安全策略,允许容器内的进程执行所有系统调用。这种方式提供了最大的灵活性,但也降低了安全性。

RuntimeDefault:相比之下,使用 "RuntimeDefault" 提供了一定程度的安全性提升,因为它限制了容器能够执行的系统调用,减少了潜在攻击面。

 

http://www.xdnf.cn/news/1168147.html

相关文章:

  • zabbix“专家坐诊”第295期问答
  • 以太网基础⑥ ZYNQ PS端 基于LWIP的TCP例程测试
  • MATLAB软件使用频繁,企业如何做到“少买多用”?
  • MFC类Qt的自动布局框架
  • 力扣-链表相关题 持续更新中。。。。。。
  • UE5 UI ScrollBox 滚动框
  • 欧拉系统二进制部署Docker
  • Linux_Ext系列文件系统基本认识(一)
  • Fluent许可与网络安全策略
  • 【洛谷】用两个数组实现静态单链表、静态双向链表,排队顺序
  • 【C语言进阶】动态内存管理(1)
  • 赋能未来数学课堂——基于Qwen3、LangChain与Agent架构的个性化教辅系统研究
  • Vue + WebSocket 实时数据可视化实战:多源融合与模拟数据双模式设计
  • vscode目录,右键菜单加入用VSCode打开文件和文件夹(快速解决)(含删除)(脚本)
  • 华为服务器操作系统openEuler介绍与安装
  • 信息学奥赛一本通 1553:【例 2】暗的连锁
  • C++_Hello算法_队列
  • Grails(Groovy)框架抛出NoHandlerFoundException而不是返回404 Not Found
  • Android-API调用学习总结
  • 专题 前端面试知识梳理大全
  • Leetcode题解:209长度最小的子数组,掌握滑动窗口从此开始!!!
  • Android13重置锁屏(1)
  • 碰一碰发视频源码搭建:支持OEM
  • 现在希望用git将本地文件crawler目录下的文件更新到远程仓库指定crawler目录下,命名相同的文件本地文件将其覆盖
  • 【Tomcat】Tomcat线程池深度调优手册(终极版)
  • 用USBi仿真器的SPI模式和IIC模式来调试DSP应该怎么做?
  • Vue项目中的AJAX请求与跨域问题解析
  • Linux CentOS 虚拟机升级内核至4.x以上版本
  • 异构融合 4A:重构高性能计算与复杂场景分析的安全与效率边界
  • Go 的第一类对象与闭包