gpt4 book ai didi

shell - 使用Dockerfile中的Shell脚本启动多个服务

转载 作者:行者123 更新时间:2023-12-02 21:09:35 25 4
gpt4 key购买 nike

我正在创建一个Dockerfile,以使用“docker run”命令中的启动脚本来安装和启动WebLogic 12c服务。我在执行startWeblogic.sh和startNodeManager.sh脚本的CMD指令中传递了 shell 程序脚本。但是,当我登录到容器时,它仅启动了第一个脚本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脚本尝试执行的所有操作。
希望能帮助到你!

关于shell - 使用Dockerfile中的Shell脚本启动多个服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55603183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com