Como entro num contentor de ancoragem?

Estou a começar a trabalhar com o Docker. Estou usando a imagem de base WordPress e docker-compose.

eu estou tentando ssh em um dos recipientes para inspecionar os arquivos / diretórios que foram criados durante a compilação inicial. Tentei fugir, mas isso não fez nada. Mesmo que tivesse, preferia ter uma consola onde pudesse atravessar a estrutura do directório, em vez de executar um único comando. Qual é a maneira certa de fazer isto com o Docker?

Author: Peter Mortensen, 2015-05-11

20 answers

docker attach vai deixar você se conectar ao seu recipiente de Docker, mas isso não é realmente a mesma coisa que ssh. Se o seu contentor estiver a correr um servidor web, por exemplo, docker attach irá provavelmente ligá-lo ao stdout do processo do servidor web. Não vai necessariamente dar-te uma concha.

O comando docker exec é provavelmente o que procura; isto permitir-lhe-á executar comandos arbitrários dentro de um contentor existente. Por exemplo:

docker exec -it <mycontainer> bash
Claro, qualquer que seja o comando. você está executando deve existir no sistema de arquivos container.

No comando acima <mycontainer> está o nome ou o ID do contentor alvo. Não importa se você está ou não usando docker compose; basta executar docker ps e usar tanto o ID (um texto hexadecimal mostrado na primeira coluna) ou o nome (mostrado na coluna final). Por exemplo:

$ docker ps
d2d4a89aaee9        larsks/mini-httpd   "mini_httpd -d /cont   7 days ago          Up 7 days                               web                 

Posso correr:

$ docker exec -it web ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
18: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:3/64 scope link 
       valid_lft forever preferred_lft forever
Eu poderia fazer a mesma coisa correndo:
$ docker exec -it d2d4a89aaee9 ip addr
Da mesma forma, eu poderia começar uma concha em o contentor;
$ docker exec -it web sh
/ # echo This is inside the container.
This is inside the container.
/ # exit
$
 971
Author: larsks, 2015-05-11 16:44:52

Para embater num contentor, escreva isto:

docker exec -t -i container_name /bin/bash
 193
Author: Agustí Sánchez, 2015-10-11 01:34:24
Digamos que, por razões que são suas, Você realmente quer usar o SSH. Dá alguns passos, mas pode ser feito. Aqui estão os comandos que você executaria dentro do recipiente para configurá-lo...
apt-get update
apt-get install openssh-server

mkdir /var/run/sshd
chmod 0755 /var/run/sshd
/usr/sbin/sshd

useradd --create-home --shell /bin/bash --groups sudo username ## includes 'sudo'
passwd username ## Enter a password

apt-get install x11-apps ## X11 demo applications (optional)
ifconfig | awk '/inet addr/{print substr($2,6)}' ## Display IP address (optional)

Agora pode até executar aplicações gráficas (se estiverem instaladas no contentor) usando o encaminhamento X11 para o cliente SSH:

ssh -X username@IPADDRESS
xeyes ## run an X11 demo app in the client
Aqui estão alguns recursos relacionados:
 60
Author: nobar, 2018-08-05 13:16:07

Repare : esta resposta promove uma ferramenta que escrevi.

Eu criei um servidor SSH contendo que você pode 'colar' em qualquer container em execução. Desta forma você pode criar composições com cada recipiente. O único requisito é que o recipiente tem Bash.

O seguinte exemplo iniciaria um servidor SSH ligado a um contentor com o nome 'my-container'.

docker run -d -p 2222:22 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e CONTAINER=my-container -e AUTH_MECHANISM=noAuth \
  jeroenpeeters/docker-ssh

ssh localhost -p 2222

Quando se ligar a este serviço SSH (com o seu cliente SSH à sua escolha), uma sessão Bash irá ser iniciado no recipiente com o nome "my-container".

Para mais indicações e documentação, ver: https://github.com/jeroenpeeters/docker-ssh

 16
Author: Jeroen Peeters, 2017-05-25 19:19:09

SSH num contentor de estivadores usando este comando:

sudo docker exec -i -t (container ID) bash
 13
Author: Tjs, 2017-05-25 19:19:28
Se está aqui à procura de uma resposta específica, como eu, fornece uma forma fácil de entrar sem ter de procurar a identificação do contentor gerado.

docker-compose exec toma o nome do serviço de acordo com o seu arquivo docker-compose.yml.

Então para obter uma shell Bash para o seu serviço 'web', você pode fazer:

$ docker-compose exec web bash
 11
Author: bcmcfc, 2018-08-05 18:34:33

Se estiver a usar o 'Docker' no Windows e quiser obter acesso ao 'shell' de um contentor, use isto:

winpty docker exec -it <container_id> sh

O mais provável é que já tenhao Git Bash instalado. Se não o fizer, certifique-se de o instalar.

 9
Author: Cosmin Ababei, 2017-02-09 09:04:32

Para se ligar ao cmd num contentor do Windows, use

docker exec -it d8c25fde2769 cmd

Onde d8c25fde2769 é a identificação do contentor.

 5
Author: Aqeel Qureshi, 2018-08-05 13:38:50

docker exec será definitivamente uma solução. Uma forma fácil de trabalhar com a pergunta que fez é montando a pasta dentro do 'Docker' para a pasta do sistema local .

Para que possa ver as alterações no caminho local instantaneamente.

docker run -v /Users/<path>:/<container path> 
 4
Author: Pratik, 2017-05-25 19:17:53

Utilizar:

docker attach <container name/id here>

Outro modo, embora haja um perigo para ele, é usar attach, mas se você Ctrl + C para sair da sessão, você também irá parar o recipiente. Se você só quer ver o que está acontecendo, use docker logs -f.

:~$ docker attach --help
Usage:  docker attach [OPTIONS] CONTAINER

Attach to a running container

Options:
      --detach-keys string   Override the key sequence for detaching a container
      --help                 Print usage
      --no-stdin             Do not attach STDIN
      --sig-proxy            Proxy all received signals to the process (default true)
 4
Author: rbrooker, 2018-08-05 13:34:48

Em alguns casos, a sua imagem pode ser Alpina. Neste caso ele vai lançar:

O EXECUTIME do OCI falhou: o exec falhou: container_linux.go: 348: iniciar o processo do contentor causou "exec: \" bash\": ficheiro executável não encontrado em $PATH": desconhecido

Porque /bin/bash não existe. Em vez disso, deve usar:

docker exec -it 9f7d99aa6625 ash

Ou

docker exec -it 9f7d99aa6625 sh
 4
Author: Deoxyseia, 2018-08-05 18:51:29

Para inspeccionar ficheiros, execute docker run -it <image> /bin/bash para obter um terminal interactivo. A lista de imagens pode ser obtida por docker images. Ao contrário de docker exec, esta solução também funciona no caso de uma imagem não começar (ou sair imediatamente após a execução).

 3
Author: igo, 2018-08-05 13:44:09

É simples!

Enumere todas as suas imagens do acoplador:

sudo docker images

No meu sistema mostrou o seguinte resultado:

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
bash                latest              922b9cc3ea5e        9 hours ago
14.03 MB
ubuntu              latest              7feff7652c69        5 weeks ago         81.15 MB
Tenho duas imagens do Docker no meu PC. Digamos que quero correr o primeiro.
sudo docker run -i -t ubuntu:latest /bin/bash
Isto vai dar-lhe o controlo terminal do contentor. Agora você pode fazer todo o tipo de operações de shell dentro do recipiente. Como fazer ls irá enviar todas as pastas na raiz do sistema de ficheiros.
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
 3
Author: Patel Sunil, 2018-08-05 18:54:01

Se tiver o Docker instalado com {[[0]}, pode usar a interface gráfica. Abra Kitematic do ícone do acoplador e na janela Kitematic seleccione o seu contentor e carregue depois no ícone exec.

Você pode ver o registo do contentor e muitas informações do contentor (na página Configuração) também nesta interface.

Select Kitematic from menu

Click on exec

 2
Author: Alireza Fattahi, 2018-08-05 18:52:43

SOLUÇÃO DE GOINSIDE

Instalar goinside a ferramenta da linha de comandos com:

sudo npm install -g goinside

E entrar num contentor com um tamanho terminal adequado com:

goinside docker_container_name

Resposta Antiga

Pusemos este excerto.~/.profile:
goinside(){
    docker exec -it $1 bash -c "stty cols $COLUMNS rows $LINES && bash";
}
export -f goinside

Isto não só faz com que todos possam entrar num contentor com:

goinside containername

Também resolve um problema de longa duração sobre o tamanho fixo do terminal de contentores do Cais. O que é muito irritante se encarares ele.

Também se seguires a ligação também terás a completação de comandos para os nomes dos contentores do docker.

 2
Author: Soorena, 2018-08-13 09:58:06

Use este comando:

docker exec -it containerid /bin/bash`
 1
Author: Admin Hack, 2018-08-05 18:54:18

Outra opção é usar nsenter.

PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>)
nsenter --target $PID --mount --uts --ipc --net --pid
 0
Author: xuhdev, 2015-05-11 19:09:58

Se estiver a utilizar a composição da Docker, isto irá levá-lo para dentro de um contentor da Docker.

docker-compose run container_name /bin/bash

Dentro do contentor irá levar-te ao WORKDIR definido no ficheiro Dockerfile. Pode alterar o seu directório de trabalho por

WORKDIR directory_path # E.g  /usr/src -> container's path
 0
Author: Sivakumar, 2018-08-05 18:47:32
No meu caso, por algumas razões, preciso de verificar todas as informações envolvidas em cada contentor. Assim, os seguintes comandos devem ser válidos no container...
ip
route
netstat
ps
...
Verifiquei todas estas respostas, não são válidas para mim. Procurei informações noutros sites. Eu não vou adicionar um super link aqui, uma vez que não está escrito em inglês. Então eu acabei de colocar este post com solução sumária para as pessoas que têm o mesmo requisito que eu. Diz que tens um contentor chamado teste de luz. Siga os passos abaixo.
  • docker inspect light-test -f {{.NetworkSettings.SandboxKey}}. Este comando receberá resposta como /var/run/docker/netns/xxxx.
  • Depois ln -s /var/run/docker/netns/xxxx /var/run/netns/xxxx. A pasta pode não existir, Faça mkdir /var/run/netns primeiro.
  • Agora você pode executar ip netns exec xxxx ip addr show para explorar o mundo da rede em container.

PS. xxxx é sempre o mesmo valor obtido através do primeiro comando. E, claro, quaisquer outros comandos são válidos, ou seja ip netns exec xxxx netstat -antp|grep 8080.

 0
Author: Light.G, 2018-09-04 05:08:29

For docker-compose up (Docker4Drupal)

docker-compose exec php bash

Usoo 'Docker' do Drupal num portátil Linux. Depois de executar o contentor, eu uso 'docker-compose exec php bash' para me ligar ao Contentor para poder executar comandos drush. Funciona bem para mim.

 -3
Author: illutek, 2018-08-05 13:41:43