Czy mogę zbudować kontener Docker z Dockerfile w sposób interaktywny z alokacją niektórych pseudo TTY?

12

Buduję kontener od dołu 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
...

Robię to dość rzadko, ale przed użyciem ssh-keygeni po nim jest wiele poleceń .

Wiem, że mogę to zrobić od skryptu, docker exec -it thirsty_darwin sh script.sha następnie oznaczyć obraz, a następnie użyć łączenia łańcuchów kontenerów (obrazów), ale nie jest to tak klarowne rozwiązanie, jak chcę.

Nawet najgorszy przypadek dotyczy sytuacji, ssh-add ~/.ssh/id_rsagdy muszę użyć narzędzia oczekującego. Narzędzie Oczekiwanie na stałe zakodowało moje hasło. Nie chcę tego robić.

koralgooll
źródło

Odpowiedzi:

17

Zasadniczo nie powinieneś zawierać żadnych tajemnic w obrazach Dockera. Zobacz tę odpowiedź, aby uzyskać więcej informacji na ten temat.

Docker nie obsługuje interaktywnych kompilacji z dobrych powodów, jak wyjaśniono w tym numerze .

Jeśli naprawdę musisz to zrobić, możesz użyć 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

Teraz thirsty_darwinmasz interaktywne zmiany.

Aktualizacja: Docker wydał bardziej kompleksowe zarządzanie tajemnicami od czasu napisania tej odpowiedzi.

Matt Vollrath
źródło
Jak wspomniałem, znalazłem to rozwiązanie, ale pierwszy link (ta odpowiedź) ma dobre obejście mojego problemu. Zamontuję klucz VOLUMEz hosta zamiast tworzyć własny w kontenerze. Dzięki!
koralgooll
1
Nie zachęcam jednak do robienia tego docker commitnormalnie - może namalować cię w trochę „złotym obrazie”.
Sobrique
To dobry punkt @Sobrique. Jest to jeden z powodów, dla których Docker odradza interaktywne lub w inny sposób niedeterministyczne kompilacje
Matt Vollrath,
Czy więc Docker jest używany do budowy zwykłych maszyn? Ponieważ wiele wielu instalacji wymaga interakcji użytkownika. Nie mogę korzystać z Dockerfile w mojej wersji tylko dlatego, że muszę zainstalować SAGE i zadać kilka pytań użytkownikowi.
Magno C,
@MagnoC, nie, możesz zbudować cokolwiek z Dockerem. Ideą Dockerfiles jest to, że zawsze chcesz uzyskać taki sam rezultat podczas uruchamiania. Interaktywne dane wejściowe mogą to zmienić. Jak powiedział Matt, możesz zmienić obraz w zmieniony pojemnik. Tak robiłem przynajmniej ...
musicliftsme