我尝试对Weblogic服务器进行dockerize。现在在docker容器中启动服务器后,我面临启动节点管理器的问题。我的docker文件如下。
FROM oracle/weblogic:12.1.3-generic
ENV JAVA_OPTIONS="${JAVA_OPTIONS} -
Dweblogic.nodemanager.SecureListener=false" \
ADMIN_PORT="7001" \
ADMIN_HOST="localhost"
USER oracle
COPY dockerfiles/keyStore/keystore_ss.jks /u01/oracle/keystore/
COPY dockerfiles/patch/* /u01/oracle/patch/
COPY dockerfiles/local_domainScripts /u01/oracle/local_domainScripts/
COPY dockerfiles/scripts/* /u01/oracle/
COPY dockerfiles/applicationFiles/ /u01/oracle/applicationFiles/
USER root
RUN yum install -y procps
RUN chmod +x startWeblogic.sh
USER oracle
RUN /u01/oracle/wlst /u01/oracle/local_domainScripts/config.py
RUN nohup bash -c "/u01/oracle/user_projects/domains/local_domain/bin/startNodeManager.sh &" && sleep 4
CMD ["/u01/oracle/user_projects/domains/local_domain/startWebLogic.sh"]
这将创建weblogic服务器实例。我要在启动此服务器后启动节点管理器。
运行命令:
docker run -d --name wls_local_domain --network=host --hostname localhost -p 7001:7001 test-docker:0-SNAPSHOT
在容器内执行 ./ startNodeManager.sh 时,将启动节点管理器。要启动节点管理器,需要首先启动weblogic服务器。
我想使用bash脚本。我尝试了这个,但没有帮助 github link
答案 0 :(得分:1)
您不能(有用)RUN
后台进程。该Dockerfile命令启动执行RUN
命令的中间容器,保存其文件系统,然后退出;到下一个Dockerfile命令执行时,不再有任何进程在运行。
如果这是商业维护的图像,则可以检查是否为Oracle has intstructions on how to use it。 (通过单击,那里的所有示例都没有启动节点管理器;是否有必要?)
最佳实践通常是在Docker容器中仅运行一台服务器(最好是在前台运行,并作为该容器的主进程)。如果那行得通并且没有共享的文件系统依赖性,则可以将除最后一个CMD
之外的所有其他内容拆分为一个基本的Dockerfile,然后再添加两个仅带有FROM
行指向您的Dockerfile大部分是内置图片和请求的CMD
。
如果真的无法正常工作,那么您将不得不转而在容器中运行某些初始化系统,通常是supervisord。