2015-07-03 15 views
34

Pracuję nad zadaniem, które polega na budowaniu obrazu dokowanego z centOs jako podstawy przy użyciu Dockerfile. Jeden z kroków wewnątrz pliku dockerfile wymaga i https_proxy zmiennych ENV, które należy ustawić w celu pracy za serwerem proxy.Czy możemy przekazywać zmienne ENV za pomocą wiersza polecenia cmd podczas budowania obrazu dokowanego przez dokowanie?

Ponieważ ten plik Dockerfile będzie używany przez wiele zespołów o różnych serwerach proxy, chcę uniknąć konieczności edytowania pliku Docker dla każdej drużyny. Zamiast tego szukam rozwiązania, które pozwala mi przekazywać zmienne ENV w czasie kompilacji, np.

sudo doker build-http_proxy = somevalue.

Nie jestem pewien, czy jest już opcja, która to zapewnia. Czy czegoś brakuje?

+0

jaki jest problem z przechodzącej osoby w czasie wykonywania? Coś w rodzaju 'dokera uruchomić -e http_proxy http://1.2.3.4:3128 -e https_proxy 1.2.3.4: 3129'? Dokument 'docker run' http://docs.docker.com/reference/commandline/run/ – user2915097

+1

Problem polega na tym, że jeden z kroków wewnątrz pliku dokera inicjuje instalację yum i nie powiedzie się, jeśli nie ustawię ENV http/https zmienne i bez prawidłowej instalacji nie mogę zbudować obrazu .so ** dokowanie ** nie pomoże mi tutaj. – anired

+0

Obawiam się, że będziesz musiał zbudować konkretne obrazy, jedyną różnicą jest to, że wartości http_proxy (s) ONBUILD mogą ci pomóc, ale obawiam się, że nie jest tu odpowiedni, zobacz dokument https://docs.docker.com/ reference/builder/ – user2915097

Odpowiedz

57

Kontener można budować za pomocą build arguments (w Docker 1.9+), które działają jak zmienne środowiskowe.

Oto metoda:

FROM php:7.0-fpm 
ARG APP_ENV=local 
ENV APP_ENV ${APP_ENV} 
RUN cd /usr/local/etc/php && ln -sf php.ini-${APP_ENV} php.ini 

a następnie zbudować pojemnik produkcja:

docker build --build-arg APP_ENV=prod .

dla konkretnego problemu:

FROM debian 
ENV http_proxy ${http_proxy} 

a następnie uruchomić:

docker build --build-arg http_proxy=10.11.24.31 .

Zauważ, że jeśli budować swoje pojemniki z docker-compose, można specify these build-args in the docker-compose.yml file, ale nie na linii poleceń. Można jednak użyć variable substitution in the docker-compose.yml file, which uses environment variables.

+1

Działa tylko na docker 1.9 + – zengr

+4

Ponieważ przeoczyłem: potrzebujesz ARG, aby poinformować doker, że argument budowania może zostać przekazany do konstruktora. Bez podania ARG nie działa. –

+1

To 'ENV APP_ENV $ {APP_ENV}' nie jest potrzebne. Wystarczy mieć 'ARG APP_ENV' bez' = local' i pobierze on argument build i użyje go jako dowolnej zmiennej ustawionej przez 'ENV' – ElmoVanKielmo

0

Zmierzyłem się z tą samą sytuacją.

Według odpowiedzi rozwiązania ładnej Sin30 jest za pomocą powłoki,

CMD ["sh", "-c", "cd /usr/local/etc/php && ln -sf php.ini-$APP_ENV php.ini"]