我正在用我自己的图像扩展 APIMan / Wildfly Docker 图像,这将做两件事:
1) 将我的 .war 文件应用程序放入 Wildfly 独立/部署目录
2) 执行一系列查询 Wildfly 服务器的 cURL 命令以配置 APIMan。
最初,我尝试创建两个 Docker 映像(第一个放入 .war 文件,第二个执行 cURL 命令),但是我错误地认为最里面的映像中的 CMD 指令将首先执行,而 CMD 将向外执行.
例如:
ImageA:
FROM jboss/apiman-wildfly:1.1.6.Final
RUN /opt/jboss/wildfly/bin/add-user.sh admin admin --silent
COPY /RatedRestfulServer/target/RatedRestfulServer-1.0-SNAPSHOT.war /opt/jboss/wildfly/standalone/deployments/
CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0", "-bmanagement", "0.0.0.0", "-c", "standalone-apiman.xml"]
和
ImageB:
FROM ImageA
COPY /configure.sh /opt/jboss/wildfly/
CMD ["/opt/jboss/wildfly/configure.sh"]
我最初假设在运行时 Wildfly / APIMAN 将首先启动(根据 ImageA CMD 指令),然后运行我的自定义脚本(根据 ImageB CMD 指令)。我假设这是不正确的,因为在整个层次结构中,只执行了 1 条 CMD 指令(链中最外层 Dockerfile 中的最后一条)?
因此,然后我尝试将所有内容合并到 1 个 Dockerfile 中,这将(在构建过程中)启动 Wildfly / APIMAN,运行 cURL 命令,关闭 Wildfly 服务器,然后 CMD 命令将在运行时启动它,Wildfly / APIMan 会进行配置。但是,这不起作用,因为当我启动 Wildfly(作为构建的一部分)时,它控制控制台并等待日志消息显示,因此构建永远不会完成。如果我在 RUN 命令的末尾附加一个“&”,它不会运行(Dockerfile : RUN 导致 No op)。
这是我这次尝试的 Dockerfile:
FROM jboss/apiman-wildfly:1.1.6.Final
RUN /opt/jboss/wildfly/bin/add-user.sh admin admin --silent
COPY /RatedRestfulServer/target/RatedRestfulServer-1.0-SNAPSHOT.war /opt/jboss/wildfly/standalone/deployments/
COPY /configure.sh /opt/jboss/wildfly/
RUN /opt/jboss/wildfly/bin/standalone.sh -b 0.0.0.0 -bmanagement 0.0.0.0 -c standalone-apiman.xml
RUN /opt/jboss/wildfly/configure.sh
RUN /opt/jboss/wildfly/bin/jboss-cli.sh --connect controller=127.0.0.1 command=:shutdown
CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0", "-bmanagement", "0.0.0.0", "-c", "standalone-apiman.xml"]
有什么解决办法吗?我正在尝试在 Wildfly / APIMan 启动后运行我的“configure.sh”脚本。这对我来说是在构建过程中还是在运行时完成并不重要,但是在构建过程中我看不到任何方法,因为 Wildfly 没有守护程序模式。