将变量参数提供给Docker ENTRYPOINT

时间:2017-07-15 01:40:41

标签: docker dockerfile

假设我在Dockerfile中有这一行:

ENTRYPOINT ["/usr/src/app/node_modules/suman/cli.js","a","b","c"]

以编程方式填充b和c的最佳方法是什么?我不确定如何避免硬编码ENTRYPOINT。

有一些方法可以解决这个问题。我可以在一个变量中传递我的所有参数,并硬编码一个变量,如下所示:

ENTRYPOINT ["/usr/src/app/node_modules/suman/cli.js","--all-args=${x}"]

但我坦率地不知道如何正确实现,如果可能的话,我宁愿使用第一个a,b,c模式解决它。有人知道这样做的方法吗?

2 个答案:

答案 0 :(得分:1)

如果您想更改参数,为什么不在docker run line上传递它们?

ENTRYPOINT ["/usr/src/app/node_modules/suman/cli.js"]

docker run -ti yourimage a b c

图像名称之后的参数将像传统参数一样传递。在这里,cli.js将以argv个参数接收它们。

如果您希望正确处理包含空格的单个参数,请在docker run命令"上使用双引号。

我还建议您使用proper entrypoint for Docker,以便更好地处理CTR + C和STOP信号以及编程功能等更多内容。

答案 1 :(得分:0)

为了实现这一点,最好简单地省略Dockerfile中的ENTRYPOINT行,然后使用docker run传入--entrypoint值,如下所示:

docker run --entrypoint="/usr/src/app/node_modules/suman/cli.js" --name  ${container_name} ${image_tag} ${argz}

您可以在此处阅读有关覆盖入口点的信息:

https://medium.com/@oprearocks/how-to-properly-override-the-entrypoint-using-docker-run-2e081e5feb9d