Докер: как создать образ с сохранением учетных данных - PullRequest
0 голосов
/ 04 марта 2019

У меня есть базовый образ archlinux - archlinux / base

Теперь, используя это изображение, я хочу создать другое изображение, в котором я хочу, чтобы это изображение сохраняло некоторые учетные данные для входа в систему

У меня есть программа под названиемsampleprogram.Необходимо войти в систему. Поэтому первый шаг для использования этой программы - войти в систему.

$ sampleprogram login

- он запрашивает имя пользователя и пароль

Со следующего раза мне не нужно будет входить в системуи начните со второго шага.

$ sampleprogram connect

подключится с использованием ранее введенных учетных данных.

Итак, я пытаюсь создать изображение с образцом, в котором сохранен логин

Dockerfile:

FROM archlinux/base
RUN pacman -Syy && pacman -S sampleprogram
RUN samplepgrogram login (ofcourse i will be using a script with expect)


docker build -t archlinux/sampleprogram .

После создания образа (например, arclinux / sampleprogram)

, затем я хочу использовать:

docker run -it archlinux/sampleprogram sampleprogram connect

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

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

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

Вы не можете безопасно хранить данные в образе Docker.Любой может тривиально docker history получить список команд, которые создали образ, или docker run --entrypoint=/bin/sh, чтобы получить корневую оболочку.Даже на очень минимальных изображениях, у которых нет оболочек, любой, кто может выполнить любую команду Docker, имеет root на хосте и может поискать в /var/lib/docker, чтобы найти то, что вы пытаетесь скрыть.

(В другом ответе имя пользователя и пароль необходимы для входа в операторы Dockerfile ENV. Они будут представлены в виде простого текста в выводе docker history, чтобы все могли его видеть.)

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

docker run -v $PWD/sampleprogram:/sampleprogram/credentials \
  archlinux/sampleprogram:latest \
  sampleprogram login
docker run -p 8080:8080 ... \
  -v $PWD/sampleprogram:/sampleprogram/credentials \
  archlinux/sampleprogram:latest

(что предполагает, что файл Docker заканчивается чем-то вроде CMD ["sampleprogram", "connect"] для установки команды по умолчанию.)

0 голосов
/ 04 марта 2019

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

Dockerfile 1:

FROM archlinux/base
RUN pacman -Syy && pacman -S sampleprogram

ENV APP_USER_NAME="user-name"
ENV APP_PASSWORD="password"

RUN sampleprogram login ${APP_USER_NAME} ${APP_PASSWORD}

теперь создайте его, используя сборку Docker: docker build archlinux/sampleprogram:intermediatev1 .

Dockerfile 2:

FROM archlinux/sampleprogram:intermediate-v1
WORKDIR "to your working directory"
COPY "src-path" "dest-folder-path" # copy any important folder/content you like to keep

затем запустите сборку Docker для второго файла: docker build archlinux/sampleprogram:sampleapp-v1.

Теперь вы можете запустить: docker run -it archlinux/sampleprogram:sampleapp-v1 sampleprogram connect без запроса учетных данных на этот раз:)

Примечание : поведение вашего приложения не упомянуто относительно того, как / где оно хранит пропуск, поэтому you need to make those changes in here, но логика заключается в том, что вы можете использовать промежуточные контейнеры для выполнения работы (так называемые многоэтапные сборки) см. Здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...