Dockerfile在shell入口点之前运行入口点

在将parameter passing给shell入口点之前,我想要做一些最后一分钟的设置,为了实现这一点,我有以下几点想法。

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

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

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

ONBUILD指令为图像添加一个触发器指令,稍后将该图像用作另一个构build的基础。 触发器将在下游构build的上下文中执行,就像它已经在下游Dockerfile中的FROM指令之后立即插入一样。

如果您正在构build将用作构build其他映像的基础的映像,那么这非常有用,例如可以使用用户特定configuration自定义的应用程序构build环境或守护程序。

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

  1. Dockerfile应至less指定CMDENTRYPOINT命令之一。
  2. 当使用容器作为可执行文件时,应该定义ENTRYPOINT
  3. 应该使用CMD作为为ENTRYPOINT命令定义默认参数或在容器中执行ad-hoc命令的一种方法。
  4. 当使用替代参数运行容器时, CMD将被覆盖。

CMD成为一个参数列表,当两者都被指定时发送到ENTRYPOINT, 参见手册 ,所以这不是路要走

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

我没有尝试过,但沿线的东西

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