Como entrar num contentor do acoplador que já está a correr com um TTY novo
Tenho um contentor que está a gerir o serviço Apache em primeiro plano. Eu gostaria de ser capaz de acessar o recipiente de outra concha, a fim de" bisbilhotar " dentro dele e examinar os arquivos. De momento, se me anexar ao container, fico olhando para o servidor Apache e não posso executar nenhum comando.
É possível ligar outro tty a um contentor? Possivelmente, posso aproveitar-me do facto de que o Docker está a enrolar-se com o LXC. contentores? Eu tentei {[[[0]} mas parece que apenas um tty é disponibilizado e esse é o que está executando o daemon apache. Talvez haja uma maneira de permitir vários consoles lxc durante a compilação?preferia não configurar e construir o contentor com um serviço openssh, se possível.
9 answers
docker exec
. Isto permite-lhe introduzir um acoplador em execução:
docker exec -it [container-id] bash
Você deve usar a ferramenta de Jérôme Petazzoni chamada 'nsenter' para entrar em um recipiente sem usar SSH. Ver: https://github.com/jpetazzo/nsenter
Instalar com a simples execução: docker run -v /usr/local/bin:/target jpetazzo/nsenter
Depois use o comando docker-enter <container-id>
para entrar no contentor.
Actualizar
Como no 'docker 0. 9', para os passos abaixo para agora funcionarem, terá agora de actualizar o ficheiro /etc/default/docker
com o '-e lxc'
para a opção inicial do servidor do docker antes de reiniciar o servidor (fiz isto reiniciando a máquina).
[[7]} ... ele [docker 0.9] contém uma nova abstração "motor driver" para tornar possível o uso de outras API que não LXC para iniciar recipientes. Além disso, proporciona um novo baseado no controlador do motor numa nova biblioteca API (libcontainer) que é capaz para lidar com grupos de controle sem usar ferramentas LXC. A questão principal é: que se você está confiando em lxc-attach para realizar ações em seu container, Como iniciar uma concha dentro do container, que é extremamente útil para o ambiente de desenvolvimento...
Lembre-se que isto irá impedir que a nova máquina apenas a funcionalidade opcional de rede do docker 0. 11 "funcione" e só irá ver a interface loopback. Relatório de erros
Acontece que a solução para uma questão diferente Também era a solução para esta:
...pode utilizar o docker
ps -notrunc
para obter o ID completo do contentor lxc e em seguida, uselxc-attach -n <container_id>
Executar a bash nesse recipiente como raiz.
Update: em breve terá de usar ps --no-trunc
em vez de ps -notrunc
que está a ser desactualizado.
Encontre o ID completo do contentor
Indique a LXC attach command.
O topo mostra o meu processo apache a correr que o Estivador começou.
nsenter
faz isso. No entanto, eu também precisava entrar em um recipiente de uma forma simples e nsenter não foi suficiente para as minhas necessidades. Foi buggy em algumas ocasiões (black screen plus-WD flag não funciona). Além disso, eu queria fazer login como um usuário específico e em um diretório específico.
A sua utilização é tão fácil como
./docker-enter [-u <user>] [-d <directory>] <container ID>
E a execução do ecrã tmux / GNU dentro do contentor? Parece a maneira mais suave de aceder a todos os vty que quiser com um simples:
$ docker attach {container id}
Primeiro Passo obter o ID do contentor:
docker ps
O COMANDO DO ID DO CONTENTOR CRIOU OS NOMES DOS PORTOS DE ESTADO
1170fe9e9460 localhost: 5000 / python: env-7e847468c4d73a0f35e9c5164046ad88". /run_notebook.sh " há 26 segundos subiu 25 segundos 0. 0. 0. 0: 8989- > 9999/TCP SLURM_ task-303337_0
1170fe9e9460
é a identificação do contentor neste caso.
Segundo , introduza o acoplador:
docker exec -it [container_id] bash
Assim no caso acima:
docker exec -it 1170fe9e9460 bash
A maneira "nsinit" é:
Instalar o nsinit
git clone [email protected]:dotcloud/docker.git
cd docker
make shell
De dentro do recipiente:
go install github.com/dotcloud/docker/pkg/libcontainer/nsinit/nsinit
De fora:
docker cp id_docker_container:/go/bin/nsinit /root/
Usa-o
cd /var/lib/docker/execdriver/native/<container_id>/
nsinit exec bash
Comecei o powershell numa execução do microsoft / iis como servidor utilizar
docker exec -it <nameOfContainer> powershell
docker exec -t -i container_name /bin/bash
Vou levar-te à consola dos contentores.