我正在尝试基于payara dockerimage在payara micro中部署应用程序,并且我需要在ENTRYPOINT中传递一个论据快照版本(基本上我想以ENTRYFORM访问构建args)exec形式,因为首选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。有人可以举一个例子。
最佳答案
带注释的行不起作用,因为它是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
指令中使用build args。这是不可能的,因为ARG
或ENV
都没有扩展ENTRYPOINT
或CMD
:https://docs.docker.com/engine/reference/builder/#environment-replacement,https://docs.docker.com/engine/reference/builder/#scope您也可以看看great page with best practices专门编写Dockerfile和
ENTRYPOINT
指令。
关于docker - 如何在ENTRYPOINT dockerfile中访问构建参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59197917/