【问题标题】:Dockerfile run entrypoint before shell entrypointDockerfile 在 shell 入口点之前运行入口点
【发布时间】:2016-08-19 15:05:06
【问题描述】:

我想在将参数传递给 shell 入口点之前在运行时进行最后一分钟的设置,为此我有以下想法。

ENTRYPOINT ./run_binary ${args}; /bin/sh -c
CMD ./run_binary

但是,通过这样做,似乎没有任何 CMD 参数进入 shell 入口点。有没有解决的办法?我只是想在将控制权交还给 shell 入口点(然后通过CMD 给用户)之前在二进制文件上运行一个设置步骤。

【问题讨论】:

    标签: docker


    【解决方案1】:

    当两个参数都被指定时,CMD 成为发送到 ENTRYPOINT 的参数列表,see the manual,所以这不是要走的路

    但您可以使用 .sh 脚本作为 ENTRYPOINT,它首先执行您的二进制命令,然后将接收到的参数转发到 shell

    我没有尝试过,但类似

    #!/bin/sh
    
    ./run_binary
    /bin/sh -c "$@"
    

    【讨论】:

      【解决方案2】:

      您可以使用从原始 Dockerfile 触发 ONBUILD 语句的中间构建映像,请参阅:https://docs.docker.com/engine/reference/builder/#/onbuild

      ONBUILD 指令将触发指令添加到图像中 稍后执行,当图像用作基础时 另一个构建。触发器将在上下文中执行 下游构建,就好像它是在 下游 Dockerfile 中的 FROM 指令。

      如果您正在构建一个将用作 构建其他图像的基础,例如应用程序构建 可以使用特定于用户的环境或守护程序进行定制 配置。

      关于 CMD 和 ENTRYPOINT,请参阅:https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact

      1. Dockerfile 应至少指定CMDENTRYPOINT 之一 命令。
      2. ENTRYPOINT 应在将容器用作容器时定义 可执行文件。
      3. CMD 应该用作定义默认参数的一种方式 ENTRYPOINT 命令或用于在 容器。
      4. CMD 将在使用替代方法运行容器时被覆盖 论据。

      【讨论】:

        猜你喜欢
        • 2017-11-14
        • 2021-01-25
        • 2021-07-12
        • 1970-01-01
        • 2021-07-10
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多