我有一个码头文件如下所示。
FROM registry.access.redhat.com/ubi8/ubi
ENV JAVA_HOME /usr/lib/jvm/zulu11
RUN \
set -xeu && \
yum -y -q install https://cdn.azul.com/zulu/bin/zulu-repo-1.0.0-1.noarch.rpm && \
yum -y -q install python3 zulu11-jdk less && \
yum -q clean all && \
rm -rf /var/cache/yum && \
alternatives --set python /usr/bin/python3 && \
groupadd trino --gid 1000 && \
useradd trino --uid 1000 --gid 1000 && \
mkdir -p /usr/lib/trino /data/trino && \
chown -R "trino:trino" /usr/lib/trino /data/trino
ARG TRINO_VERSION
COPY trino-cli-${TRINO_VERSION}-executable.jar /usr/bin/trino
COPY --chown=trino:trino trino-server-${TRINO_VERSION} /usr/lib/trino
COPY --chown=trino:trino default/etc /etc/trino
EXPOSE 8080
USER trino:trino
ENV LANG en_US.UTF-8
CMD ["/usr/lib/trino/bin/run-trino"]
HEALTHCHECK --interval=10s --timeout=5s --start-period=10s \
CMD /usr/lib/trino/bin/health-check在运行Dockerfile中的主命令之前,我想扩展这个Dockerfile并运行几个指令?不知道该怎么做。
发布于 2022-04-17 08:49:56
如果您想在容器启动时运行这些命令,可以使用一个入口点来保持原始命令不动。
exec $@将使用PID 1执行传递给入口点的参数。无论以CMD的形式提供什么参数,这些参数都将在$@中,因此您基本上是在ENTRYPOINT之后执行CMD,这与这个命令可能是什么无关。
创建一个入口点脚本:
#!/usr/bin/env sh
# run some preperation
exec "$@"然后你把它复制到你的构建中并使用它。
FROM baseimage
COPY --chmod=755 ./entrypoint.sh /
ENTRYPOINT ["/entrypoint.sh"]如果希望在构建时运行这些命令,请使用FROM指令并添加RUN指令。新图像将使用基本映像中的CMD。因此,您不需要设置任何CMD。
FROM baseimage
RUN more
RUN stuff发布于 2022-04-17 08:35:13
因为您只能在Dockerfile中拥有一个CMD语句(如果您有多个CMD语句,那么只执行最后一个),所以您需要将所有命令都放到一个CMD语句中。
您可以使用shell的能力使用&&操作符来链接命令,如下所示
CMD my-first-command && \
my-second-command && \
/usr/lib/trino/bin/run-trino这将在运行run-trino之前先运行您的命令,这是当前的CMD。
发布于 2022-04-17 08:47:46
每当你使用一个基本图像,码头抛出图像的最后一层。所以你可以通过写你自己的图像来扩展这个图像。
例如:这是我的第一张照片(我从第三方那里得到的,就像你一样)
FROM alpine:latest
CMD echo "hello"我想要扩展它,以输出hello world而不是hello,所以我扩展了另一个docker文件,如下所示
FROM first:latest
CMD echo "hello world"当我建立图像并运行它时,
docker build -t second .
docker run second我得到了我的预期输出
hello world希望这能帮上忙
https://stackoverflow.com/questions/71899579
复制相似问题