如何在docker build中提供和使用命令行参数?

如何在docker build中提供和使用命令行参数?,docker,dockerfile,Docker,Dockerfile,我有一个Dockerfile,如下所示: FROM centos:centos6 MAINTAINER tapash ###### Helpful utils RUN yum -y install sudo RUN yum -y install curl RUN yum -y install unzip #########Copy hibernate.cfg.xml to Client ADD ${hibernate_path}/hibernate.cfg.xml /usr/share/

我有一个Dockerfile,如下所示:

FROM centos:centos6
MAINTAINER tapash

######  Helpful utils
RUN yum -y install sudo
RUN yum -y install curl
RUN yum -y install unzip

#########Copy hibernate.cfg.xml to Client

ADD ${hibernate_path}/hibernate.cfg.xml /usr/share/tomcat7/webapps/roc_client/WEB-INF/classes/
我需要在docker构建期间为$hibernate_路径指定一个要传递的命令行参数


如何执行此操作?

创建一个脚本,将所需的值放入docker文件并启动
docker build-t mytag。
如果这纯粹是一个构建时变量,可以使用

此标志允许您传递构建时变量,这些变量与Dockerfile的
RUN
指令中的常规环境变量类似。此外,这些值不会像
ENV
值一样保留在中间或最终图像中


在1.7中,只有静态可用。
因此,一种解决方案是从模板Dockerfile.tpl生成所需的Dockerfile

Dockerfile.tpl:

...
ENV hibernate_path=xxx
ADD xxx/hibernate.cfg.xml /usr/share/tomcat7/webapps/roc_client/WEB-INF/classes/
...
每当您要构建映像时,首先生成Dockerfile:

sed "s,xxx,${hibernate_path},g" Dockerfile.tpl > Dockerfile
然后正常构建:
docker build-t myimage。

然后您将受益于(docker 1.7中):

  • 构建时环境替换
  • 运行时环境变量

亲爱的消极选民……请告诉我问题出了什么问题?这行不通。构建映像时,docker文件只读取一次。请尝试此操作。说明:已提供但未定义标志:--build arg请参阅“docker build--help”。您必须具有docker 1.9或1.10Hm。我使用的是docker 1.7。有选择吗?有:升级。1.7已过时。@Priyanka.Patil ADD不是“运行时”。现在是构建时间。因此需要构建arg。
sed "s,xxx,${hibernate_path},g" Dockerfile.tpl > Dockerfile