Почему этот Dockerfile имеет и ENV, и экспорт с одинаковым PATH? - PullRequest
0 голосов
/ 22 мая 2018

Я смотрел на golang: 1.10.2 Dockerfile (на сегодняшний день) и не мог понять, почему переменная PATH используется в двух разных местах.Вот нижняя часть файла с соответствующим фрагментом:

RUN set -eux; \
    # some code ...
    export PATH="/usr/local/go/bin:$PATH"; \
    go version

ENV GOPATH /go
ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH

RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH"
WORKDIR $GOPATH

Какова цель

export PATH="/usr/local/go/bin:$PATH";

и

ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH

соответственно?

У меня сложилось впечатление, что директива ENV должна быть сокращена до ENV $GOPATH:$PATH, поскольку /usr/local/go/bin уже находится в $PATH.

1 Ответ

0 голосов
/ 23 мая 2018

Каждый RUN (если он не находится в режиме использования явного argv) запускает новую оболочку, которая должна завершиться до завершения этой команды RUN.Эта оболочка может изменить только собственную среду и среду своих детей;он не может изменить среду других программ, запущенных после его выхода.

Напротив, ENV контролирует среду, которую Docker передает в будущие процессы при запуске.

Таким образом,Вы можете переместить ENV над RUN и удалить экспорт из RUN (чтобы правильно установить PATH до запуска оболочки), но вы не можете заставить RUN выполнять работуENV.

...