Чи можна створити контейнер 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.