我正在创建一个Dockerfile,使用“docker run”命令中的启动脚本来安装和启动WebLogic 12c服务。我在CMD指令中传递shell脚本,该指令执行startWeblogic.sh和startNodeManager.sh脚本。但是当我登录到容器时,它只启动了第一个脚本startWeblogic.sh,甚至没有启动第二个脚本,这在docker日志中很明显。
手动在容器内执行相同的脚本,它启动两个服务。运行脚本以启动容器中的多个进程而不是退出容器的正确指令是什么?
我在这个脚本和dockerfile中缺少什么?我知道容器只能运行一个进程,但是以脏的方式,如何为WebLogic等具有名称服务器,节点管理器,托管服务器以及创建托管域和计算机的应用程序启动多个服务。只有在WebLogic名称服务器运行时才能启动受管服务器。
脚本:startscript.sh
#!/bin/bash
# Start the first process
/u01/app/oracle/product/wls122100/domains/verdomain/bin/startWebLogic.sh -D
status=$?
if [ $status -ne 0 ]; then
echo "Failed to start my_first_process: $status"
exit $status
fi
# Start the second process
/u01/app/oracle/product/wls122100/domains/verdomain/bin/startNodeManager.sh -D
status=$?
if [ $status -ne 0 ]; then
echo "Failed to start my_second_process: $status"
exit $status
fi
while sleep 60; do
ps aux |grep "Name=adminserver" |grep -q -v grep
PROCESS_1_STATUS=$?
ps aux |grep node |grep -q -v grep
PROCESS_2_STATUS=$?
# If the greps above find anything, they exit with 0 status
# If they are not both 0, then something is wrong
if [ $PROCESS_1_STATUS -ne 0 -o $PROCESS_2_STATUS -ne 0 ]; then
echo "One of the processes has already exited."
exit 1
fi
done
截断了dockerfile。
RUN unzip $WLS_PKG
RUN $JAVA_HOME/bin/java -Xmx1024m -jar /u01/app/oracle/$WLS_JAR -silent -responseFile /u01/app/oracle/wls.rsp -invPtrLoc /u01/app/oracle/oraInst.loc > install.log
RUN rm -f $WLS_PKG
RUN . $WLS_HOME/server/bin/setWLSEnv.sh && java weblogic.version
RUN java weblogic.WLST -skipWLSModuleScanning create_basedomain.py
WORKDIR /u01/app/oracle
CMD ./startscript.sh
docker构建和运行命令:
docker build -f Dockerfile-weblogic --tag="weblogic12c:startweb" /var/dprojects
docker rund -d -it weblogic12c:startweb
docker exec -it 6313c4caccd3 bash
请使用supervisord
在docker容器中运行多个服务。它将使整个过程更加健壮和可靠。运行supervisord -n
作为您的CMD
命令并在/etc/supervisord.conf
中配置您的所有服务。
示例conf看起来像:
[program:WebLogic]
command=/u01/app/oracle/product/wls122100/domains/verdomain/bin/startWebLogic.sh -D
stderr_logfile = /var/log/supervisord/WebLogic-stderr.log
stdout_logfile = /var/log/supervisord/WebLogic-stdout.log
autorestart=unexpected
[program:NodeManager]
command=/u01/app/oracle/product/wls122100/domains/verdomain/bin/startNodeManager.sh -D
stderr_logfile = /var/log/supervisord/NodeManager-stderr.log
stdout_logfile = /var/log/supervisord/NodeManager-stdout.log
autorestart=unexpected
它将处理您尝试使用shell脚本执行的所有操作。 希望能帮助到你!