Bisakah saya membuat wadah Docker dari Dockerfile secara interaktif dengan alokasi beberapa TTY semu?

12

Saya membuat wadah dari bawah 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
...

Saya melakukannya sangat jarang, tetapi ada banyak perintah sebelum menggunakan dari ssh-keygendan setelah itu.

Saya tahu bahwa saya bisa melakukannya dari script melalui docker exec -it thirsty_darwin sh script.shdan kemudian tag gambar dan kemudian menggunakan chaining of container (gambar), tetapi itu bukan solusi sejelas yang saya inginkan.

Bahkan kasus terburuk adalah ssh-add ~/.ssh/id_rsaketika saya harus menggunakan alat harapkan. Harapkan alat telah hardcod kata sandi saya. Saya tidak ingin melakukannya.

koralgooll
sumber

Jawaban:

17

Secara umum, Anda tidak boleh menyertakan rahasia dalam gambar Docker. Lihat jawaban ini untuk lebih lanjut tentang topik ini.

Docker tidak mendukung build interaktif untuk alasan yang baik seperti yang dijelaskan dalam masalah ini .

Jika Anda benar-benar perlu melakukan ini, Anda dapat menggunakan docker commitseperti ini:

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

Sekarang thirsty_darwinada perubahan interaktif Anda.

Pembaruan: Docker telah merilis manajemen rahasia yang lebih komprehensif sejak jawaban ini ditulis.

Matt Vollrath
sumber
Seperti yang saya sebutkan saya telah menemukan solusi itu, tetapi tautan pertama (jawaban ini) memiliki solusi yang bagus untuk masalah saya. Saya akan memasang kunci VOLUMEdari host alih-alih membuat wadah saya sendiri. Terima kasih!
koralgooll
1
Saya ingin tidak melakukan hal yang docker commitnormal - itu bisa melukis Anda menjadi sedikit sudut 'gambar emas'.
Sobrique
Itu poin bagus @Sobrique. Ini adalah salah satu alasan Docker mencegah pembangunan interaktif atau non-deterministik
Matt Vollrath
Jadi apakah Docker digunakan untuk membangun hanya mesin? Karena banyak instalasi akan membutuhkan interaksi pengguna. Saya tidak dapat menggunakan Dockerfile di build saya hanya karena saya perlu menginstal SAGE dan menanyakan beberapa pertanyaan kepada pengguna.
Magno C
@ MagnoC, tidak, Anda dapat membuat apa pun dengan Docker. Gagasan di balik Dockerfiles adalah Anda selalu menginginkan hasil yang sama saat dijalankan. Input interaktif dapat mengubahnya. Seperti yang Matt katakan, Anda bisa memasukkan wadah yang diubah menjadi gambar. Setidaknya itulah yang telah saya lakukan ..
musicliftsme