Posso criar um contêiner Docker a partir do Dockerfile de maneira interativa com a alocação de alguns pseudo TTY?

12

Eu construo um contêiner abaixo do 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
...

Faço isso muito raramente, mas há muitos comandos antes de usar ssh-keygene depois dele.

Eu sei que posso fazê-lo a partir do script docker exec -it thirsty_darwin sh script.she depois marcar a imagem e usar o encadeamento de contêineres (imagens), mas não é a solução mais clara que eu quero.

O pior caso é ssh-add ~/.ssh/id_rsaquando eu tenho que usar a ferramenta expect. A ferramenta Esperar codificou minha senha. Eu não quero fazer isso.

koralgooll
fonte

Respostas:

17

Geralmente, você não deve incluir segredos nas imagens do Docker. Veja esta resposta para mais informações sobre este tópico.

O Docker não suporta compilações interativas por boas razões, conforme explicado neste problema .

Se você realmente precisa fazer isso, pode usar docker commito seguinte:

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

Agora thirsty_darwintem suas alterações interativas.

Atualização: o Docker lançou um gerenciamento de segredos mais abrangente desde que esta resposta foi escrita.

Matt Vollrath
fonte
Como mencionei, encontrei a solução, mas o primeiro link (esta resposta) tem uma boa solução para o meu problema. Vou montar a chave através VOLUMEdo host, em vez de criar minha própria em contêiner. Obrigado!
Koralgooll
1
Eu recomendaria que não fizesse docker commitnormalmente - ele pode pintar você em um canto de "imagem dourada".
Sobrique
Esse é um bom argumento @Sobrique. Esta é uma das razões de encaixe desencoraja interactiva ou de outra forma não-determinística constrói
Matt Vollrath
Então o Docker é usado para construir apenas máquinas simples? Porque muitas instalações exigirão interação do usuário. Não consigo usar o Dockerfile no meu build apenas porque preciso instalar o SAGE e ele faz algumas perguntas ao usuário.
Magno C
@ MagnoC, não, você pode criar qualquer coisa com o Docker. A idéia por trás do Dockerfiles é que você sempre deseja o mesmo resultado ao executar. Entradas interativas podem mudar isso. Como Matt disse, você pode comprometer um contêiner alterado em uma imagem. Isso é o que eu venho fazendo, pelo menos ..
musicliftsme