Eu quero ssh ou bash em um contêiner de docker em execução. Por favor, veja o exemplo:
$ sudo docker run -d webserver
webserver is clean image from ubuntu:14.04
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
665b4a1e17b6 webserver:latest /bin/bash ... ... 22/tcp, 80/tcp loving_heisenberg
agora eu quero obter algo assim (vá para o contêiner em execução):
$ sudo docker run -t -i webserver (or maybe 665b4a1e17b6 instead)
$ root@665b4a1e17b6:/#
However when I run the line above I get new CONTAINER ID
$ root@42f1e37bd0e5:/#
Eu usei o Vagrant e gostaria de ter um comportamento semelhante ao vagrant ssh
.
sudo docker exec -i -t 665b4a1e17b6 /bin/sh
para ser capaz de instalar programas apt e pacotessudo docker exec -i -t container-name /bin/bash
é um caminho a percorrer.Respostas:
A resposta é o
attach
comando do Docker . Portanto, para o meu exemplo acima, a solução será:Para o Docker versão 1.3 ou posterior: Obrigado ao usuário WiR3D, que sugeriu outra maneira de obter o shell de um contêiner. Se usarmos
attach
, podemos usar apenas uma instância do shell. Portanto, se queremos abrir um novo terminal com uma nova instância do shell de um contêiner, precisamos apenas executar o seguinte:ou
fonte
sudo docker attach loving_heisenberg
-i -t
é igual a-it
docker attach
A instalação em uma instância do MongoDB, por exemplo, matará a instância. Como explicado em mais detalhes nesta perguntaattach
eexec
são animais diferentes.Do Docker 1.3 em diante:
Basicamente, se o recipiente Docker foi iniciado usando o
/bin/bash
comando que você pode acessá-lo usandoattach
. Caso contrário, será necessário executar o comando para criar uma instância do Bash dentro do contêiner usandoexec
.Também para sair do Bash sem deixá-lo em execução em um processo não autorizado:
Sim, é simples assim.
fonte
RUN
comando no dockerfile for/bin/bash
. Mas depende do que você quer dizer. Se você deseja executar o recipiente e têm o bash disponível imediatamente naquele mesmo terminal, em seguida, correr com-it
deve fazê-losudo
vsdocker
group. De qualquer forma, existe uma falha de segurança incorporada à janela de encaixe que pode fornecer privilégios completos no sistema de arquivos host do convidado - independentemente de você usar o grupo de janela de encaixe ousudo
para iniciar o contêiner.Embora o autor da pergunta tenha dito especificamente que está interessado em um contêiner em execução, também vale a pena notar que, se o contêiner não estiver em execução, mas você deseja executá-lo para bisbilhotar, é possível executar:
docker run -i -t --entrypoint /bin/bash <imageID>
fonte
Tente o seguinte:
Fonte: https://docs.docker.com/articles/basics/#running-an-interactive-shell
fonte
root@42f1e37bd0e5:/#
e nãoroot@665b4a1e17b6:/#
)Com base na resposta de @ Timur, criei o seguinte script útil
Configuração
Coloque o
docker-ssh
arquivo no seu$PATH
com o seguinte conteúdoNota : Alguns contêineres não contêm
bash
, masash
,sh
etc. Nestes casos,bash
devem ser substituídos no script acima.Uso
Se você tiver apenas uma instância em execução, basta executar
Caso contrário, forneça a ele um parâmetro de ID do docker que você obtém
docker ps
(primeira coluna)fonte
Se o seu contêiner não tiver o bash instalado, você pode tentar sh:
Ou procure conchas em / bin primeiro:
fonte
Eu criei um servidor SSH em contêiner que fornece recursos SSH para qualquer contêiner em execução. Você não precisa mudar seu contêiner. O único requisito é que o contêiner tenha uma festança.
Se você tiver um contêiner com o nome 'web-server1'. O seguinte comando docker run iniciaria um segundo contêiner que forneceria SSH para o primeiro contêiner.
Para obter mais dicas, consulte https://github.com/jeroenpeeters/docker-ssh
fonte
@jpetazzo tem uma publicação incrível sobre esse assunto . A resposta curta seria usar
nsenter
:PS: Não se esqueça de conferir a discussão nos comentários do post ...
Felicidades
fonte
docker exec
solução do @ WiR3D é bastante mais conveniente.Você também pode fornecer ao contêiner do Docker um endereço IP roteável com o Pipework e, depois disso, colocar o SSH na máquina com esse novo endereço IP.
Este será mais "tradicional" (ssh), em vez de usar um comando específico do aplicativo como
docker attach
, e acabará por torná-lo mais 'portátil' em todos os sistemas e versões.fonte
Às vezes, será útil poder fazer ssh em um contêiner do Docker, especialmente durante o desenvolvimento. A seguinte imagem do Docker permite ssh em um contêiner usando uma chave privada:
UbuntuWithSSH-Docker
A essência do arquivo Docker é https://gist.github.com/devbkhadka/98792f7bca57f9778793b2db758b3d07 .
fonte
Isso funciona :-)
fonte
IR PARA DENTRO
instale a
goinside
ferramenta de linha de comando com:e entre em um contêiner de encaixe com um tamanho de terminal adequado com:
para mais detalhes, verifique isso .
fonte
Para bater em um contêiner em execução, digite o seguinte:
fonte
Apenas para informação. Se você precisar fazer login em um contêiner simples que não seja um daemon, use os seguintes comandos:
fonte
se o contêiner for parado como, por exemplo, um contêiner somente de dados, uma boa solução é executar um contêiner descartável toda vez que você desejar anexar ao contêiner de dados. Nesse caso, o próprio contêiner de dados poderia estar completamente vazio, pois o contêiner temporário teria as ferramentas do SO.
fonte