首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展坞映像以运行diff命令

扩展坞映像以运行diff命令
EN

Stack Overflow用户
提问于 2022-04-17 05:42:01
回答 3查看 103关注 0票数 -1

我有一个码头文件如下所示。

代码语言:javascript
复制
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并运行几个指令?不知道该怎么做。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-04-17 08:49:56

如果您想在容器启动时运行这些命令,可以使用一个入口点来保持原始命令不动。

exec $@将使用PID 1执行传递给入口点的参数。无论以CMD的形式提供什么参数,这些参数都将在$@中,因此您基本上是在ENTRYPOINT之后执行CMD,这与这个命令可能是什么无关。

创建一个入口点脚本:

代码语言:javascript
复制
#!/usr/bin/env sh
# run some preperation
exec "$@"

然后你把它复制到你的构建中并使用它。

代码语言:javascript
复制
FROM baseimage
COPY --chmod=755 ./entrypoint.sh /
ENTRYPOINT ["/entrypoint.sh"]

如果希望在构建时运行这些命令,请使用FROM指令并添加RUN指令。新图像将使用基本映像中的CMD。因此,您不需要设置任何CMD

代码语言:javascript
复制
FROM baseimage
RUN more
RUN stuff
票数 2
EN

Stack Overflow用户

发布于 2022-04-17 08:35:13

因为您只能在Dockerfile中拥有一个CMD语句(如果您有多个CMD语句,那么只执行最后一个),所以您需要将所有命令都放到一个CMD语句中。

您可以使用shell的能力使用&&操作符来链接命令,如下所示

代码语言:javascript
复制
CMD my-first-command && \
    my-second-command && \
    /usr/lib/trino/bin/run-trino

这将在运行run-trino之前先运行您的命令,这是当前的CMD。

票数 0
EN

Stack Overflow用户

发布于 2022-04-17 08:47:46

每当你使用一个基本图像,码头抛出图像的最后一层。所以你可以通过写你自己的图像来扩展这个图像。

例如:这是我的第一张照片(我从第三方那里得到的,就像你一样)

代码语言:javascript
复制
FROM alpine:latest
CMD echo "hello"

我想要扩展它,以输出hello world而不是hello,所以我扩展了另一个docker文件,如下所示

代码语言:javascript
复制
FROM first:latest
CMD echo "hello world"

当我建立图像并运行它时,

代码语言:javascript
复制
docker build -t second .
docker run second

我得到了我的预期输出

代码语言:javascript
复制
hello world

希望这能帮上忙

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71899579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档