You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非root账号用Podman无法停止Tomcat容器问题求助

问题详情
  • 核心异常:使用non-root账号执行podman stop/podman kill/podman container rm -f均无法终止Tomcat容器,但root账号操作可立即完成
  • 触发变量:昨日通过non-root账号配置了systemd,使该容器在RHEL 8服务器重启后自动运行
  • 命令执行异常表现:
    • podman stop tomcat输出:
      podman stop tomcat
      WARN[0010] StopSignal SIGTERM failed to stop container tomcat in 10 seconds, resorting to SIGKILL
      tomcat
      podman ps
      CONTAINER ID  IMAGE                           COMMAND     CREATED             STATUS             PORTS                   NAMES
      03719b688b7d  localhost/tomcat:latest                  About a minute ago  Up About a minute  0.0.0.0:8443->8443/tcp  tomcat
      
    • podman kill tomcat输出:
      podman kill tomcat
      tomcat
      podman ps 
      CONTAINER ID  IMAGE                           COMMAND     CREATED        STATUS        PORTS                   NAMES
      035241ccaccf  localhost/tomcat:latest                  4 seconds ago  Up 5 seconds  0.0.0.0:8443->8443/tcp  tomcat
      
    • podman container rm -f tomcat输出:
      podman container rm -f tomcat
      WARN[0010] StopSignal SIGTERM failed to stop container tomcat in 10 seconds, resorting to SIGKILL
      tomcat
      podman ps
      CONTAINER ID  IMAGE                           COMMAND     CREATED         STATUS         PORTS                   NAMES
      22627de7f882  localhost/tomcat:latest                  5 seconds ago   Up 5 seconds   0.0.0.0:8443->8443/tcp  tomcat
      
  • 附加异常:每次执行podman ps容器ID都会变化;浏览器访问Tomcat应用返回404;删除镜像后容器不再显示
解决建议
  1. 先禁用systemd自动重启服务
    容器ID不断变化、无法终止的核心原因大概率是你配置的systemd服务在容器被终止后立即自动重启了它。

    • 找到non-root用户下的systemd服务文件(路径通常为~/.config/systemd/user/,文件名一般包含容器名)
    • 停止并禁用该服务:
      systemctl --user stop [你的容器服务名]
      systemctl --user disable [你的容器服务名]
      systemctl --user daemon-reload
      
    • 此时再执行podman stop tomcat或podman rm -f tomcat,确认容器是否能正常终止
  2. 排查容器内信号传递问题
    non-root账号可能无法将信号正确传递到容器内的Tomcat进程:

    • 进入容器查看Tomcat进程的运行用户:
      podman exec tomcat ps aux | grep tomcat
      
    • 如果Tomcat以容器内的非root用户运行,尝试在容器内手动终止进程:
      podman exec tomcat kill [Tomcat进程ID]
      
    • 若手动终止有效,可调整容器启动时的信号配置,确保SIGTERM能正确触发Tomcat优雅退出
  3. 清理残留资源并重新部署

    • 彻底清理容器与镜像:
      podman rm -f $(podman ps -aq)
      podman rmi localhost/tomcat:latest
      
    • 重新构建镜像时,确保镜像内Tomcat的启动脚本能正确响应终止信号,同时避免配置不必要的自动重启逻辑
  4. 排查Tomcat应用404问题

    • 查看容器内Tomcat日志,确认应用部署状态:
      podman logs tomcat
      
    • 检查容器内webapps目录,确认应用包是否存在且解压正常:
      podman exec tomcat ls -l /usr/local/tomcat/webapps/
      
    • 验证端口映射是否正确,确保host的8443端口确实转发到容器内的Tomcat服务端口

内容的提问来源于stack exchange,提问作者DaeYoung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 05:05:15