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.

 388
Author: Diogo Gomes, 2014-01-05

9 answers

Com o docker 1.3, há um novo comando.docker exec. Isto permite-lhe introduzir um acoplador em execução:
docker exec -it [container-id] bash
 756
Author: Michael_Scharf, 2017-07-11 17:41:48

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.

 39
Author: Hyperfocus, 2014-07-05 13:57:03

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).

update to the /etc/default/docker file

Isto é tudo por causa disso...
[[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...

Origem

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, use lxc-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.

enter image description hereEncontre o ID completo do contentor

enter image description hereIndique a LXC attach command.

enter image description hereO topo mostra o meu processo apache a correr que o Estivador começou.

 18
Author: Programster, 2017-05-23 12:34:42

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.

Acabei por fazer a minha própria ferramenta para entrar em contentores. Você pode encontrá-lo em: https://github.com/Pithikos/docker-enter

A sua utilização é tão fácil como

./docker-enter [-u <user>] [-d <directory>] <container ID>
 4
Author: Pithikos, 2014-07-30 16:42:04

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}
 3
Author: cig0, 2016-05-01 05:00:51

Primeiro Passo obter o ID do contentor:

docker ps

Isto vai mostrar-te algo como ...

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

 3
Author: patapouf_ai, 2018-01-24 18:04:23

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
 2
Author: Ivailo Bardarov, 2015-11-10 23:06:51

Comecei o powershell numa execução do microsoft / iis como servidor utilizar

docker exec -it <nameOfContainer> powershell
 1
Author: Ahmed Samir, 2017-10-17 12:27:04
docker exec -t -i container_name /bin/bash
Vou levar-te à consola dos contentores.
 1
Author: Zemuldo, 2017-11-20 11:37:03