【问题标题】:Pass argument to dockerfile @ runtime将参数传递给 dockerfile @runtime
【发布时间】:2016-07-28 04:03:20
【问题描述】:

基本上希望能够运行带有指定参数的 docker 容器

码头文件:

FROM nodesource/node:4.0

ADD package.json package.json
RUN npm install
ADD . .

ENTRYPOINT ["node","index.js"]

我实际上是在运行为 rabbitMQ 找到的教程代码: https://www.rabbitmq.com/tutorials/tutorial-one-javascript.html

唯一的区别是,对我来说,我使用的是 $args 而不是硬编码的 Que 名称

var argv = require('minimist')(process.argv.slice(2));
var q = argv.que;

我运行 nodejs 的命令行方式是: node index.js --que 1

并且工作正常。但是,当从 docker run 执行时,它似乎不起作用(args 读取不正确)

我试过了:

docker run -it mydockerimage --que (my queue name)

但出现错误:

来自守护进程的错误响应:oci 运行时错误:exec:“--que”: $PATH 中找不到可执行文件。

我编写这个 docker 镜像以便在运行时传递参数的正确方法是什么?

我知道我可以通过覆盖 --entrypoint 来做到这一点,但理想情况下我想少输入...这甚至可能吗?

【问题讨论】:

  • 为什么不让它成为环境的一部分呢?然后你可以在 Dockerfile 中设置一个默认值或者使用-e 传递它。
  • 您确定您的图像具有上述入口点,而不是 cmd?请与docker inspect mydockerimage联系。
  • @BMitch 是的,当然,因为如果我通过 ENTRYPOINT ["node","index.js", "--que", "1"] 它会正常工作
  • 将完整列表传递给 CMD 也可以正常工作,但是您的 ENTRYPOINT 设置为这样,您不应该看到 --que file not found 错误。

标签: javascript node.js docker


【解决方案1】:

结合ENTRYPOINTCMD 允许您为图像指定默认可执行文件,同时还为该可执行文件提供可能被用户覆盖的默认参数。

FROM nodesource/node:4.0

ADD package.json package.json
RUN npm install
ADD . .

ENTRYPOINT ["node","index.js"]
CMD ["--que","1"]

因此,docker run 的默认行为将是发送参数--que 1

docker run -it mydockerimage

但您可以覆盖该值

docker run -it mydockerimage --que 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 2018-03-26
    • 1970-01-01
    相关资源
    最近更新 更多