Kubernetes 通过Pod YAML定义执行启动脚本启动webserver问题咨询
问题修复方案
根因说明
- Dockerfile存在冗余逻辑和权限配置错误:
RUN rpm -ivh app.rpm && bash中的bash指令无实际作用,且仅给根目录下自行添加的start.sh授予了执行权限,未给RPM自动生成的/home/start.sh加执行权限,会导致脚本执行失败。 - Pod启动逻辑存在主进程退出问题:若start.sh中webserver默认后台运行,脚本执行完成后容器主进程(/bin/sh)会直接退出,容器进入终止状态,web进程也会被销毁,无法进入运行中的容器。
- 路径拼写不严谨:YAML中写的
cd home/是相对路径,虽然默认WORKDIR是/不会出错,但建议用绝对路径cd /home避免环境变化导致的问题。
修复步骤
1. 修正Dockerfile
FROM amazoncorretto:8 WORKDIR / ADD app.rpm . # 如无需自行添加的start.sh可删除本行 ADD start.sh . # 移除冗余的bash指令,完成RPM安装 RUN rpm -ivh app.rpm # 给RPM生成的/home下的启动脚本授予执行权限 RUN chmod +x /home/start.sh EXPOSE 8000
修改后重新构建镜像:docker build -t appimage6:1.0 .
2. 修正Pod YAML配置
apiVersion: v1 kind: Pod metadata: name: app-pod6 labels: name: app-pod app: containerization spec: containers: - name: appimage1 image: appimage6:1.0 command: ["/bin/sh", "-c"] args: ["cd /home && ./start.sh"] ports: - containerPort: 8000
额外说明:如果你的start.sh默认会把webserver放到后台运行,无法修改脚本的情况下,可以把args改为["cd /home && ./start.sh && tail -f /dev/null"],通过tail命令阻塞主进程,避免容器退出。
内容的提问来源于stack exchange,提问作者Azkaban
相关产品推荐
相关产品推荐

