如何在 ENTRYPOINT dockerfile 中访问构建参数



我正在尝试基于 payaradockerimage 在 payara micro 中部署一个应用程序,我需要在 ENTRYPOINT 中传递一个参数快照版本(基本上我想访问 ENTRYFORM 中的构建参数(exec 形式,因为首选 ENTRYPOINT 的执行形式: 我的 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

注释的入口点不起作用。容器日志显示部署无效。我在这里错过了什么?另外,我如何使用CMD。有人可以发布示例吗?

注释行不起作用,因为它是ENTRYPOINTexec形式,它不调用shell(/bin/sh -c(,所以变量替换不会发生。

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

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

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

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

您提到,您想在ENTRYPOINT指令中使用构建参数。这实际上是不可能的,因为ARGENV都没有在ENTRYPOINTCMD中扩展:https://docs.docker.com/engine/reference/builder/#environment-replacement,https://docs.docker.com/engine/reference/builder/#scope

你也可以看看伟大的页面,其中包含编写Dockerfile的最佳实践和ENTRYPOINT说明。

两个相辅相成的建议:

如果要将文件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 变量替换。

相关内容

  • 没有找到相关文章

最新更新