2017-04-27 33 views
12

mam dockerfileDockerfile jeśli warunek else z zewnętrznymi argumentów

FROM centos:7 
ENV foo=42 

potem zbudować

docker build -t my_docker . 

i uruchom go.

docker run -it -d my_docker 

Czy można przekazywać argumenty z wiersza poleceń i używać go z innymi plikami w Dockerfile? Mam na myśli coś takiego, jak

i kompilacji z tym argumentem.

docker build -t my_docker . --my_arg=42 
+0

to prawdopodobnie powinien być obsługiwane ze skryptu build. – Snps

+0

@ Зелёный, które jest nieprawidłowe. Zobacz poniżej odpowiedź, można to osiągnąć za pomocą --build-arg – devnul3

Odpowiedz

33

To nie może wyglądać tak czysty, ale można mieć swój Dockerfile (Warunkowo) następująco:

FROM centos:7 
ARG arg 
RUN if [ "x$arg" = "x" ] ; then echo Argument not provided ; else echo Argument is $arg ; fi 

a następnie budowanie wizerunku jako:

docker build -t my_docker . --build-arg arg=45

lub

docker build -t my_docker .

0

Jeśli chcesz dynamicznie budować obrazy, powinieneś to zrobić za pomocą skryptu kompilacji.

Docker dostarcza już zestawy SDK dla wielu języków, które zazwyczaj zawierają wywołanie kompilacji, które umożliwia dostarczenie dowolnego ciągu znaków lub pliku Docker, z którego można zbudować.

przykład z Ruby:

require 'docker' 

val = my_arg == 42 ? "TRUE" : "FALSE" 

# Create an Image from a Dockerfile as a String. 
Docker::Image.build("FROM centos:7\nENV MY_ENV=" + val)