1

我正在尝试基于payara dockerimage在payara micro中部署一个应用程序,我需要在ENTRYPOINT(基本上我想访问ENTRYFORM中的构建参数)exec表单中传递一个争论snapshotversion,因为ENTRYPOINT的exec表单是首选:我的docker文件如下:

FROM payara/micro:5.193.1

ARG snapshotversion
ENV snapshotvs=$snapshotversion

RUN jar xf payara-micro.jar

COPY /service/war/target/app-emailverification-service-war-${snapshotversion}.war ${DEPLOY_DIR}/
COPY ojdbc6.jar ${PAYARA_HOME}/
COPY --chown=payara domain.xml /opt/payara/MICRO-INF/domain/domain.xml

RUN cd /opt/payara/MICRO-INF/domain && ls -lrt
#ENTRYPOINT ["java", "-jar", "/opt/payara/payara-micro.jar", "--deploy", "/opt/payara/deployments/app-service-war-$snapshotvs.war", "--domainConfig", "/opt/payara/MICRO-INF/domain/domain.xml","--addLibs", "/opt/payara/ojdbc6.jar"]

ENTRYPOINT java -jar /opt/payara/payara-micro.jar --deploy /opt/payara/deployments/app-service-war-$snapshotvs.war --domainConfig /opt/payara/MICRO-INF/domain/domain.xml --addLibs /opt/payara/ojdbc6.jar

注释的 ENTRYPOINT 不起作用。容器日志显示部署无效。我在这里想念什么?另外,我该如何使用 CMD。有人可以发布一个例子。

4

2 回答 2

1

注释行不起作用,因为它是 的exec形式ENTRYPOINT,不会调用 shell ( /bin/sh -c),因此不会发生变量替换。

如果要使用exec表单和环境变量,则需要直接指定:

    ENTRYPOINT ["sh", "-c", "your command with env variable"]

对于您如何使用它的问题CMD,例如:

    ENTRYPOINT ["sh", "-c"]
    CMD ["your command with env variable"]

您提到过,您想在ENTRYPOINT指令中使用构建参数。这实际上是不可能的,因为也ARG没有ENVENTRYPOINTor中扩展CMDhttps://docs.docker.com/engine/reference/builder/#environment-replacementhttps://docs.docker.com/engine/reference/builder/ #范围

您还可以查看包含编写 Dockerfile的最佳实践ENTRYPOINT和具体说明的精彩页面。

于 2019-12-05T16:28:31.353 回答
0

两个相辅相成的建议:

如果你将COPY一个文件写入图像,你可以在图像中给它一个固定的名字。这样就避免了这个问题。

WORKDIR /opt/payara
COPY service/war/target/app-emailverification-service-war-${snapshotversion}.war deployments/app-service.war

如果您有一个特别长或涉及的命令,您试图将其作为主容器进程,请将其包装在 shell 脚本中。您要确保exec主容器进程避免在信号处理方面出现一些问题(导致docker stop暂停 10 秒,然后硬杀死您的实际进程)。

#!/bin/sh
exec java \
  -jar /opt/payara/payara-micro.jar \
  --deploy /opt/payara/deployments/app-service.war \
  --domainConfig /opt/payara/MICRO-INF/domain/domain.xml \
  --addLibs /opt/payara/ojdbc6.jar
COPY launch.sh ./
RUN chmod +x launch.sh
CMD ["/opt/payara/launch.sh"]

在第二种情况下,它是一个 shell 脚本,因此您可以使用普通的 shell 变量替换。

于 2019-12-06T00:57:31.717 回答