Могу ли я построить 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когда я должен использовать ожидаемый инструмент. Ожидайте, что инструмент жестко закодировал мой пароль. Я не хочу этого делать.

Ответы:


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.