假设我在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模式解决它。有人知道这样做的方法吗?
答案 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