2016-02-22 2 views
3

У меня есть 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_path.

Как это сделать?

+1

Дорогой отрицательный избиратель .. я знаю, что не так с вопросом? –

+0

Это не сработает. Файл докера просматривается один раз, когда вы создаете свой образ. –

ответ

7

Если это чисто переменная сборки времени, вы можете использовать --build-arg option of docker build.

Этот флаг позволяет передавать переменные времени построения, к которым применяются обычные переменные среды в инструкции RUN файла Docker. Кроме того, эти значения не сохраняются в промежуточных или конечных изображениях, например ENV.

docker build --build-arg hibernate_path=/a/path/to/hibernate -t tag . 

В 1.7, только статический ENV Dockerfile directive доступен.
Итак, одним из решений является создание файла Docker, необходимого вам из шаблона Dockerfile.tpl.

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 .

тогда Вы получаете выгоду от (в докер 1.7):

  • строительная среда замена
  • переменная среды выполнения.
+0

Пробовал это. Говорит: флаг предоставлен, но не определен: --build-arg См. «Сборка докеров» --help. –

+1

У вас должен быть докер 1.9 или 1.10 – VonC

+0

Хм .. Я использую докер 1.7. Какие-нибудь варианты? –

0

Вы можете создать сценарий, который помещает в вашем Dockerfile требуемое значение и запускает docker build -t mytag .

Смежные вопросы