Могу ли я построить Docker-контейнер из Dockerfile в интерактивном режиме с выделением некоторого псевдо-TTY?

12

Я строю контейнер снизу Dockerfile:

FROM ubuntu:14.04
...
RUN apt-get update && apt-get install -y vim
#RUN ssh-keygen -f /root/.ssh/id_rsa -N strongpass123$%^
RUN ssh-keygen -f /root/.ssh/id_rsa
...

Я делаю это довольно редко, но есть много команд до использования ssh-keygenи после него.

Я знаю, что могу сделать это от сценария до конца, docker exec -it thirsty_darwin sh script.shа затем пометить изображение и затем использовать цепочку контейнеров (изображений), но это не такое ясное решение, как я хочу.

Даже наихудший случай с тем, ssh-add ~/.ssh/id_rsaкогда я должен использовать ожидаемый инструмент. Ожидайте, что инструмент жестко закодировал мой пароль. Я не хочу этого делать.

koralgooll
источник

Ответы:

17

Как правило, вы не должны включать какие-либо секреты в изображения Docker. Смотрите этот ответ для получения дополнительной информации по этой теме.

Docker не поддерживает интерактивные сборки по уважительным причинам, как описано в этом выпуске .

Если вам действительно нужно это сделать, вы можете использовать docker commitтак:

docker build -t thirsty_darwin_base /path/to/Dockerfile
docker run -it --name=thirsty_darwin_changes thirsty_darwin_base /bin/bash
# do interactive stuff in the shell, then exit
docker commit thirsty_darwin_changes thirsty_darwin

Теперь thirsty_darwinесть ваши интерактивные изменения.

Обновление: Docker выпустил более полное управление секретами, так как этот ответ был написан.

Мэтт Воллрат
источник
Как я уже упоминал, я нашел это решение, но первая ссылка (этот ответ) имеет хороший обходной путь для моей проблемы. Я буду монтировать ключ через VOLUMEхост вместо создания своего собственного в контейнере. Благодарность!
koralgooll
1
Я бы не советовал делать это docker commitнормально - это может нарисовать вас немного в «золотом образе».
Sobrique
Это хороший момент @Sobrique. Это одна из причин, по которой Докер не рекомендует интерактивные или иным образом недетерминированные сборки
Мэтт Воллрат,
Так Docker используется для создания только простых машин? Потому что многие многие установки потребуют взаимодействия с пользователем. Я не могу использовать Dockerfile в моей сборке только потому, что мне нужно установить SAGE, и он задает пользователю несколько вопросов.
Magno C
@MagnoC, нет, вы можете создать что-нибудь с помощью Docker. Идея Dockerfiles заключается в том, что вы всегда хотите получить один и тот же результат при запуске. Интерактивные входы могут изменить это. Как сказал Мэтт, вы можете зафиксировать измененный контейнер в изображении. Это то, что я делал по крайней мере ..
musicliftsme