Dockerfile - Скрыть --build-args от показа во время сборки - PullRequest
0 голосов
/ 10 января 2019

У меня есть следующий Dockerfile:

FROM ubuntu:16.04

RUN apt-get update \
    && apt-get upgrade -y \
    && apt-get install -y \
    git \
    make \
    python-pip \
    python2.7 \
    python2.7-dev \
    ssh \
    && apt-get autoremove \
    && apt-get clean

ARG password
ARG username
ENV password $password
ENV username $username

RUN pip install git+http://$username:$password@org.bitbucket.com/scm/do/repo.git

Я использую следующие команды для создания образа из этого Dockerfile:

docker build -t myimage:v1 --build-arg password="somepassoword" --build-arg username="someuser" .

Однако в журнале сборки отображаются имя пользователя и пароль, которые я передаю как --build-arg.

Step 8/8 : RUN pip install git+http://$username:$password@org.bitbucket.com/scm/do/repo.git
 ---> Running in 650d9423b549
Collecting git+http://someuser:somepassword@org.bitbucket.com/scm/do/repo.git

Как их спрятать? Или есть другой способ передачи учетных данных в Dockerfile?

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Это еще хуже: они на docker history вечно.

Я сделал две вещи здесь, в прошлом, эту работу:

Вы можете настроить pip для использования локальных пакетов или заблаговременно загружать зависимости в файлы "wheel" . За пределами Docker вы можете загрузить пакет из частного репозитория, указав там свои учетные данные, а затем скопировать в полученный файл .whl.

pip install wheel
pip wheel --wheel-dir ./wheels git+http://$username:$password@org.bitbucket.com/scm/do/repo.git
docker build .
COPY ./wheels/ ./wheels/
RUN pip install wheels/*.whl

Второй - использовать многоэтапный Dockerfile, где первый этап выполняет всю установку, а второй не требует учетных данных. Это может выглядеть примерно так:

FROM ubuntu:16.04 AS build
RUN apt-get update && ...
...
RUN pip install git+http://$username:$password@org.bitbucket.com/scm/do/repo.git

FROM ubuntu:16.04
RUN apt-get update \
 && apt-get upgrade -y \
 && apt-get install \
      python2.7
COPY --from=build /usr/lib/python2.7/site-packages/ /usr/lib/python2.7/site-packages/
COPY ...
CMD ["./app.py"]

Во втором случае стоит еще раз проверить, что ничто не просочилось в ваше окончательное изображение, потому что значения ARG все еще доступны для второго этапа.

0 голосов
/ 10 января 2019

Обновление

Вы знаете, я сосредоточился на неправильной части вашего вопроса. Вы не должны использовать имя пользователя и пароль вообще . Вы должны использовать ключи доступа , которые разрешают доступ только для чтения к частным репозиториям.

После того, как вы создали ключ ssh и добавили публичный компонент в свой репозиторий, вы можете добавить личный ключ в свой образ:

RUN mkdir -m 700 -p /root/.ssh
COPY my_access_key /root/.ssh/id_rsa
RUN chmod 700 /root/.ssh/id_rsa

И теперь вы можете использовать этот ключ при установке вашего проекта Python:

RUN pip install git+ssh://git@bitbucket.org/you/yourproject.repo

(следует оригинальный ответ)

Как правило, вы не будете пекать учетные данные в таком изображении. В дополнение к проблеме, которую вы уже обнаружили, это делает ваше изображение менее полезным, потому что вам придется перестраивать его каждый раз, когда меняются ваши учетные данные, или если несколько человек хотели иметь возможность использовать его.

Учетные данные обычно предоставляются во время выполнения с помощью одного из различных механизмов:

  • Переменные среды: вы можете поместить свои учетные данные в файл, например ::

    USERNAME=myname
    PASSWORD=secret
    

    А затем включите это в docker run командную строку:

    docker run --env-file myenvfile.env ...
    

    Переменные среды USERNAME и PASSWORD будут доступны процессам в вашем контейнере.

  • Монтирование привязки: вы можете поместить свои учетные данные в файл, а затем выставить этот файл внутри контейнера в качестве монтирования привязки, используя параметр -v для docker run:

    docker run -v /path/to/myfile:/path/inside/container ...
    

    Это приведет к открытию файла как /path/inside/container внутри вашего контейнера.

  • Секреты Docker: Если вы запускаете Docker в режиме роя, вы можете выставить свои учетные данные как Секреты Docker .

...