当前位置: 首页 > 知识库问答 >
问题:

在CMD之前执行脚本

沈俊明
2023-03-14

共有1个答案

毕衡
2023-03-14

做一个定制的入口点来做你想做的事情,然后在最后执行你的CMD。

注意:如果您的映像已经定义了一个自定义入口点,您可能需要扩展它而不是替换它,或者您可能需要更改行为。

EntryPoint.sh:

#!/bin/sh

## Do whatever you need with env vars here ...

# Hand off to the CMD
exec "$@"
COPY entrypoint.sh /entrypoint.sh
RUN chmod 755 /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]
/entrypoint.sh init

入口点脚本末尾的exec负责在入口点完成所需的操作时将其切换到CMD。

ENTRYPOINT和CMD的使用经常会让刚接触Docker的人感到困惑。在评论中,你对此表示困惑。下面是它的工作原理和原因。

入口点是在容器内运行的初始内容。它将CMD作为参数列表。因此,在本例中,容器中运行的是这个参数列表:

# ENTRYPOINT = /entrypoint.sh
# CMD        = init
["/entrypoint.sh", "init"]

# or shown in a simpler form:
/entrypoint.sh init
/bin/sh -c 'init'
^--------^  ^--^
    |         \------- CMD
    \--------------- ENTRYPOINT

一开始,Docker只提供CMD,/bin/sh-c被硬编码为入口点(您不能更改它)。在这个过程中的某个时刻,人们在用例中不得不做更多自定义的事情,而Docker公开了ENTRYPOINT以便您可以将它更改为您想要的任何内容。

在我上面展示的示例中,入口点被替换为自定义脚本。(尽管它最终仍由sh运行,因为它以#!/bin/sh开头。)

该入口点将CMD作为参数。在entrypoint.sh脚本的末尾是exec“$@”。由于$@扩展到提供给脚本的参数列表,因此将其转换为

exec "init"

在注释中,您询问了在DockerFile中添加CMD的问题。是的,你能做到的。

DockerFile:

CMD ["init"]

或者如果您的命令有更多的内容,例如init-a-b这样的参数,将如下所示:

CMD ["init", "-a", "-b"]
 类似资料:
  • 问题内容: 根据Docker文档:Dockerfile中只能有一条CMD指令。如果您列出多个CMD,则只有最后一个CMD才会生效。 我希望在CMD命令(本例中为init)之前执行一个简单的bash脚本(处理docker环境变量)。 有什么办法吗? 问题答案: 使用自定义入口点 创建一个可以执行所需操作的自定义入口点,然后最后执行您的CMD。 注意 :如果您的映像已经定义了一个自定义入口点,则可能需

  • 我想将这个Spring属性文件用于数据库配置。 代码运行良好,但不幸的是,当删除所有表后数据库为空时,我会收到SQL错误,因为首先执行迁移脚本。 如何先配置 JPA 以创建表,然后再执行迁移脚本?

  • 问题内容: 我很新,很困惑。我用tkinter尝试了一个简单的脚本,它在IDLE中工作正常,但是当我尝试从CMD启动它时- tkinter窗口打开,看起来还不错,但是当您尝试单击任何按钮或文件菜单选项时,就会引发AttributeError: 我很感谢您的任何投入,或者在这里我可以找到有关IDLE和CMD之间差异的更多信息。 问题答案: 人们问起python版本是因为tk.filedialog在2

  • 如果你希望在每次运行 Puppet 之前执行命令,可以在配置文件中使用 prerun_command 配置。 类似地,你也可以使用 postrun_command 配置运行 Puppet 之后需要执行的命令。 这种机制为 Puppet 与其他软件的集成提供了强大的钩子,甚至可以触发其他机器上的事件。 prerun 和 postrun 命令必须能成功运行(即其返回的状态码为 0),否则 Puppet

  • 本文向大家介绍在CMD命令行中运行python脚本的方法,包括了在CMD命令行中运行python脚本的方法的使用技巧和注意事项,需要的朋友参考一下 网上给出了各种方法,都无碍乎先切换到Python脚本所在目录,然后输入Python脚本名称并回车,本文这里给出了更简便的方法。 方法一: 进入Python脚本所在的文件夹,shift+右击,选择“在此处打开命令窗口”,按TAB键切换文件,选择目标pyt

  • 有人能解释jenkins中执行groovy脚本和执行系统groovy脚本之间的区别吗?以及如何使用执行系统groovy脚本将脚本调用到从属。