下图无法构建,因为该图不支持shell形式,只支持exec形式,因此RUN和ENTRYPOINT只支持vector形式。请建议如何构建准确的图像,因为使用此图像很重要。
FROM gcr.io/distroless/java:8
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
&& rm -rf /aaa/bbb/*
COPY target/${JAR_FILE} /xyz/yy.jar
ENTRYPOINT exec java $JAVA_OPTS -Djdk.tls.client.protocols="tls" -jar /xyz/yy.jar $0 $@
此外,当我尝试以向量形式指定 RUN 时,我得到“exec: 在 $PATH 中找不到“apt-get”可执行文件。
答案 0 :(得分:1)
这里的 exec ... $@
用法似乎有点奇怪...
ENTRYPOINT
正在将您的容器配置为作为可执行文件运行,从而允许您的 CMD
为您的可执行文件提供默认参数,因此 100% 不需要使用 $0 $@
。
虽然我没有任何 Java 可供使用,但理论上应该可以使用这样的东西:
ARG JAR_FILE=build/*.jar
FROM gcr.io/distroless/java:8
RUN export DEBIAN_FRONTEND=noninteractive \
&& apt-get update \
&& apt-get install -qqy --no-install-recommends \
curl \
&& rm -rf /var/lib/apt/lists/*```
COPY ${JAR_FILE} app.jar
ENV JAVA_OPTS="-Djdk.tls.client.protocols=tls"
ENTRYPOINT ["java", "-jar", "$JAVA_OPTS", "-jar", "app.jar"]
# By providing an entrypoint above, your CMD can optionally define any default
# arguments you might want to fallback to.
# CMD [ "--java", "--things" ]
然而,preferred usage 是将您的 CMD
用作 exec
,而根本不将 ENTRYPOINT
包含在此类使用中。然后,您的整个 CMD
是可自定义的,您可以消除对 $JAVA_OPTS
的需要:
ARG JAR_FILE=build/*.jar
FROM gcr.io/distroless/java:8
RUN export DEBIAN_FRONTEND=noninteractive \
&& apt-get update \
&& apt-get install -qqy --no-install-recommends \
curl \
&& rm -rf /var/lib/apt/lists/*```
COPY ${JAR_FILE} app.jar
ENV JAVA_OPTS="-Djdk.tls.client.protocols=tls"
# By providing an entrypoint above, your CMD can optionally define any default
# arguments you might want to fallback to.
CMD ["java", "-jar", "$JAVA_OPTS", "-jar", "app.jar"]
如果您保持不变,我所做的另一个更改是将您的 JAVA_OPTS
移至 ARG
。这里的简单经验法则是:ARG
用于构建,ENV
用于运行时。
警告:上述过度简化过于简单。
但是,这会改变您的构建命令(如果您需要将 JAR_FILE
覆盖为此:
docker build -t jarjar/binks --build-arg JAR_FILE=another/file.jar .
你会非常相似地运行它:
JAVA_OPTS="-Djdk.tls.client.protocols='TLSv1,TLSv1.1' -Xms#G -Xmx#G" &&
docker run jarjar/binksjarjar/binks --args=here
我鼓励您进一步阅读 CMD
和 `ENTRYPOINT,以了解将它们一起/单独使用的利弊。
不幸的是,在发布我的答案和查看 comment from koorkevani 之前,我实际上无法运行其中任何一个,这使您在我的反馈中遇到的问题增加了 100%。
接受他的回答,如果您遇到任何其他问题,请告诉我们:)