优雅地阻止docker中的tomcat

优雅地阻止docker中的tomcat,tomcat,docker,Tomcat,Docker,我对运行tomcat的docker容器有以下要求: 启动tomcat作为后台进程(catalina.sh Start) 运行特定于应用程序的配置 停止tomcat(catalina.sh停止) 在前台启动tomcat。(catalina.sh run) 但是,我无法让它工作,因为应用程序配置是在tomcat初始化之前启动的。此外,步骤4失败,因为tomcat仍处于关闭过程中 如何将此过程更改为: 启动tomcat作为后台进程 等待启动 运行特定于应用程序的配置 关闭tomcat 等待关机 启动t

我对运行tomcat的docker容器有以下要求:

  • 启动tomcat作为后台进程(catalina.sh Start)
  • 运行特定于应用程序的配置
  • 停止tomcat(catalina.sh停止)
  • 在前台启动tomcat。(catalina.sh run)
  • 但是,我无法让它工作,因为应用程序配置是在tomcat初始化之前启动的。此外,步骤4失败,因为tomcat仍处于关闭过程中

    如何将此过程更改为:

  • 启动tomcat作为后台进程
  • 等待启动
  • 运行特定于应用程序的配置
  • 关闭tomcat
  • 等待关机
  • 启动tomcat作为前台进程
  • 我已经黑了下面的代码,以便我的开发活动可以继续,但是如果容器停止,下面的代码将无法正确关闭tomcat

    case $COMMAND in
        start )
            echo "Configuring OpenAM.."
            cp /artifacts/openam.war /opt/tomcat/webapps/openam.war
            cat /opt/openam-install.properties
            /opt/tomcat/bin/startup.sh
            sleep 20
            ls -lart
            cd /artifacts/configurator
            unzip configurator.zip 
            java -jar openam-configurator-tool-13.5.0.jar --acceptLicense --file /opt/openam-install.properties
            echo "Configuration Complete."
            tail -f /opt/tomcat/logs/catalina.out
            ;;
    

    你可能已经猜到了。我不擅长写shell脚本。任何帮助都将不胜感激。

    您为什么要这样做?据我所知,为了优雅地阻止tomcat,我需要向catalina流程发送SIGTERM。如果我在后台启动tomcat,docker将无法向该进程发送SIGTERM。这意味着在延迟10秒后,docker将向所有进程发送SIGKILL信号,这将杀死我的catalina进程,而不会给它一个正常关闭的机会。因此,我想使用exec catalina.sh run启动tomcat,使其在前台运行。