多次运行Docker镜像时传递不同的参数

时间:2016-11-04 00:49:24

标签: docker docker-compose dockerfile docker-machine

我需要在运行Docker Image时给出一个参数,这将是一个0-3的数字。

Dockerfile具有以下内容:

WORKDIR "mydir/build"
CMD ./maker oneapp > /artifacts/oneapp_$1.log ; ./maker twoapp > /artifacts/twoapp_$1.log ; ./maker -j13 threeapp > /artifacts/threeapp_$1.log

我将多次运行相同的Docker Image,因此我需要将日志保存在附加了_0,_1,_2,_3的/ artifact中。

我尝试将其保存在Docker文件中但不想在运行docker时将此完整行作为参数传递。

  

ENTRYPOINT [" / bin / bash"]

     

./ maker oneapp> /artifacts/oneapp_$1.log; ./maker twoapp>   /artifacts/twoapp_$1.log; ./maker -j13 threeapp>   /artifacts/threeapp_$1.log

有可能这样做吗?我需要在Dockerfile中修改什么来做我想做的事情?

1 个答案:

答案 0 :(得分:3)

只需将参数注入ENV。

宣布ENV in your Dockerfile

ENV suffix 0
./maker oneapp > /artifacts/oneapp_${suffix}.log
  

从生成的图像运行容器时,使用ENV设置的环境变量将保持不变   您可以使用docker inspect查看值,并使用docker run --env <key>=<value>更改它们。

这样,您可以声明ENV on docker run,并从正在运行的容器中的值中受益。

  

运算符可以使用一个或多个-e标志设置容器中的任何环境变量,甚至覆盖上面提到的那些,或者已经由开发人员用Dockerfile ENV定义:

在您的情况下,例如:

docker run -e suffix=2 <image_name>