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

时间:2016-08-19 15:05:06

标签: docker

我希望在将参数传递给shell入口点之前在运行时做最后一分钟的设置,为了实现这一点,我有以下几点。

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

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

2 个答案:

答案 0 :(得分:1)

当指定see the manual两者时,CMD成为要发送到ENTRYPOINT的参数列表,这样就不可能了

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

我还没有尝试过,但有些事情是

#!/bin/sh

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

答案 1 :(得分:1)

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

  

ONBUILD指令向图像添加触发指令   当图像用作基础时,稍后执行   另一个构建。触发器将在上下文中执行   下游构建,好像它已经被插入后立即   FROM下游Dockerfile中的FROM指令。

     

如果要构建将用作图像的图像,这将非常有用   用于构建其他映像的基础,例如应用程序构建   可以使用特定于用户定制的环境或守护程序   配置。

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

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