将参数传递给dockerfile @ runtime

时间:2016-07-27 18:55:11

标签: javascript node.js docker

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

dockerfile:

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的cmd行方式是: node index.js --que 1

并且工作正常。但是当从docker run执行时,它似乎没有工作(args无法正确读取)

我试过了:

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

但收到错误:

  

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

我编写此docker镜像的正确方法是什么,以便我可以在运行时传入参数?

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

1 个答案:

答案 0 :(得分:2)

组合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