在Dockerfile中使用shell脚本启动多个服务

问题描述 投票:0回答:1

我正在创建一个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
shell docker scripting dockerfile weblogic12c
1个回答
1
投票

请使用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脚本执行的所有操作。 希望能帮助到你!

© www.soinside.com 2019 - 2024. All rights reserved.