当前位置: 首页 > 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.dtcms.com/a/292529.html

相关文章:

  • docker pull 用法
  • WebAssembly浏览器指纹识别技术——实验评估与应用展望(下篇)
  • el-input 动态获焦
  • 11.【C语言学习笔记】指针(三)(回调函数、qsort排序函数、sizeof关键字和strlen函数)
  • 2025年7月中科院一区-向光生长优化算法Phototropic growth algorithm-附Matlab免费代码
  • 【文献笔记】From words to routes: Applying large language models to vehicle routing
  • 嵌入式学习的第三十三天-进程间通信-UDP
  • SciTE(Scintilla Text Editor)的配置文件多个详解笔记250722
  • Web开发 05
  • 云祺容灾备份系统Hadoop备份与恢复实操手册
  • 188粉福
  • 【第三节】Class与Style绑定
  • 网络基础15-16:MSTP +VRRP综合实验
  • 单张显卡运行多个vllm模型
  • 零基础数据结构与算法——第五章:高级算法-回溯算法子集全排列问题
  • ZooKeeper学习专栏(六):集群模式部署与解析
  • C++ new 创建数组的内在原理详解
  • linux 环境服务发生文件句柄泄漏导致服务不可用
  • ELF 文件操作手册
  • python学习-读取csv文件
  • 如何验证分类模型输出概率P值的“好坏”:评估与校准示例
  • GitHub 上的开源项目 ticktick(滴答清单)
  • recvmsg函数的用法
  • 算法学习--滑动窗口
  • 学习python中离线安装pip及下载package的方法
  • C语言:函数基础
  • day059-zabbix自定义监控与自动发现
  • Node.js:Web模块、Express框架
  • es6中的symbol基础知识
  • 在Android开发中,如何获取到手机设备的PIN码?