W moim pliku Dockerfile chciałbym zdefiniować zmienne, których będę mógł później użyć w pliku Dockerfile .
Znam ENV
instrukcję, ale nie chcę, aby te zmienne były zmiennymi środowiskowymi.
Czy istnieje sposób na zadeklarowanie zmiennych w zakresie Dockerfile ?
variables
docker
dockerfile
Maxime
źródło
źródło
Odpowiedzi:
Możesz użyć
ARG
- zobacz https://docs.docker.com/engine/reference/builder/#argźródło
O ile mi wiadomo,
ENV
zezwala tylko na to, jak wspomniano w sekcji „ Wymiana środowiska ”Muszą to być zmienne środowiskowe, aby mogły zostać ponownie zadeklarowane w każdym nowym kontenerze tworzonym dla każdej linii pliku Dockerfile przez
docker build
.Innymi słowy, te zmienne nie są interpretowane bezpośrednio w pliku Dockerfile, ale w kontenerze utworzonym dla wiersza Dockerfile, stąd użycie zmiennej środowiskowej.
Dziś używam obu
ARG
( docker 1.10+ idocker build --build-arg var=value
) orazENV
.Używanie
ARG
samego oznacza, że zmienna jest widoczna w czasie kompilacji, a nie w czasie wykonywania.Mój plik Dockerfile zazwyczaj zawiera:
W twoim przypadku
ARG
wystarczy: używam go zwykle do ustawienia zmiennej http_proxy, której kompilacja dockerowa potrzebuje, aby uzyskać dostęp do Internetu w czasie kompilacji.źródło
Odpowiedzieć na Twoje pytanie:
Możesz zdefiniować zmienną za pomocą:
Spacje wokół znaku równości są niedozwolone.
I użyj go później z:
źródło
Jeśli zmienna zostanie ponownie użyta w tej samej
RUN
instrukcji, można po prostu ustawić zmienną powłoki. Bardzo podoba mi się sposób, w jaki podeszli do tego z oficjalnym plikiem Ruby Dockerfile .źródło
RUN foo=$(date) && echo $foo
Możesz użyć,
ARG variable defaultValue
a podczas wykonywania polecenia możesz nawet zaktualizować tę wartość za pomocą--build-arg variable=value
. Aby użyć tych zmiennych w pliku docker, możesz odnieść się do nich jak$variable
w poleceniu run.Uwaga: te zmienne byłyby dostępne dla poleceń systemu Linux, takich jak
RUN echo $variable
i nie byłyby trwałe w obrazie.źródło