0

我试图对 weblogic 服务器进行 docker 化。现在,在 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链接

4

1 回答 1

1

您不能(有用地)RUN后台进程。该 Dockerfile 命令启动执行该RUN命令的中间容器,保存其文件系统,然后退出;到下一个 Dockerfile 命令执行时,没有任何进程在运行。

如果这是一个商业维护的图像,您可能会查看Oracle 是否有关于如何使用它的说明。(通过点击,那里的样本都没有启动节点管理器;有必要吗?)

最佳实践通常是在 Docker 容器中仅运行一台服务器(理想情况下在前台并作为容器的主进程)。如果这可行并且没有共享的文件系统依赖项,您可以将除最终文件之外的所有内容拆分CMD为一个基本 Dockerfile,然后再添加两个额外的 Dockerfile,其中只有FROM一行指向您主要构建的映像和一个请求的CMD.

如果这真的行不通,那么您将不得不回退到在您的容器中运行一些 init 系统,通常是supervisord

于 2018-08-15T11:28:46.923 回答