Estou começando a trabalhar com o Docker. Estou usando a imagem base do WordPress e o docker-compondo.
Estou tentando ssh em um dos contêineres para inspecionar os arquivos / diretórios que foram criados durante a compilação inicial. Eu tentei correr docker-compose run containername ls -la
, mas isso não fez nada. Mesmo assim, prefiro ter um console onde possa percorrer a estrutura de diretórios, em vez de executar um único comando. Qual é a maneira correta de fazer isso com o Docker?
docker
docker-container
Andrew
fonte
fonte
docker exec
askubuntu.com/a/543057/35816 . Obter o ID do contêiner usandodocker ps
sudo docker run -it --entrypoint /bin/bash <container_name>
leva você para o contêiner interativamente. Em seguida, pode-se inspecionar o sistema de arquivos no recipiente utilizandocd <path>
Respostas:
docker attach
permitirá que você se conecte ao seu contêiner do Docker, mas isso não é o mesmossh
. Se o seu contêiner estiver executando um servidor da web, por exemplo,docker attach
provavelmente você será conectado ao stdout do processo do servidor da web. Não vai necessariamente dar uma concha.O
docker exec
comando é provavelmente o que você está procurando; isso permitirá que você execute comandos arbitrários dentro de um contêiner existente. Por exemplo:Obviamente, qualquer comando que você esteja executando deve existir no sistema de arquivos do contêiner.
No comando acima
<mycontainer>
está o nome ou o ID do contêiner de destino. Não importa se você está usando ou nãodocker compose
; basta executardocker ps
e usar o ID (uma sequência hexadecimal exibida na primeira coluna) ou o nome (exibido na coluna final). Por exemplo, dado:Eu posso correr:
Eu poderia realizar a mesma coisa executando:
Da mesma forma, eu poderia iniciar um shell no contêiner;
fonte
docker exec
funciona apenas na execução de contêineres (caso contrário, usedocker run -it --entrypoint /bin/bash
ou similar).-it
é uma combinação de-i
e-t
que é--interactive
("Mantenha o STDIN aberto, mesmo que não esteja anexado"), respectivamente--tty
("Aloque um pseudo-TTY").docker run -it --entrypoint /bin/bash <imageid> --any --more --args
, só para esclarecer para as pessoas--any --more --args
você possui serão inseridos no que a imagem definiu como sendoCMD
e não no Docker (ou se sua imagem definir apenas umENTRYPOINT
e nãoCMD
, essas opções serão inseridas/bin/bash
conforme especificado aqui. ) Assim, por exemplo, qualquer outradocker run
opção (por exemplo--net "host"
) precisa ir antes da<imageid>
.Para bater em um contêiner em execução, digite o seguinte:
ou
ou
fonte
docker exec -it
vez dedocker exec -t -i
Digamos que, por razões suas, você realmente deseja usar o SSH. São necessários alguns passos, mas isso pode ser feito. Aqui estão os comandos que você executaria dentro do contêiner para configurá-lo ...
Agora você pode até executar aplicativos gráficos (se estiverem instalados no contêiner) usando o encaminhamento X11 para o cliente SSH:
Aqui estão alguns recursos relacionados:
fonte
Se você está aqui procurando uma resposta específica do Docker Compose como eu, ela fornece uma maneira fácil, sem precisar procurar o ID do contêiner gerado.
docker-compose exec
leva o nome do serviço conforme seudocker-compose.yml
arquivo.Portanto, para obter um shell Bash para o serviço 'web', você pode:
fonte
docker-compose run
também funciona, se o seu contêiner ainda não existir.Aviso : esta resposta promove uma ferramenta que escrevi.
Eu criei um servidor SSH em contêiner que você pode 'colar' em qualquer contêiner em execução. Dessa forma, você pode criar composições com cada contêiner. O único requisito é que o contêiner tenha Bash.
O exemplo a seguir iniciaria um servidor SSH conectado a um contêiner com o nome 'meu-contêiner'.
Quando você se conecta a esse serviço SSH (com o cliente SSH de sua escolha), uma sessão Bash será iniciada no contêiner com o nome 'meu contêiner'.
Para mais informações e documentação, consulte: https://github.com/jeroenpeeters/docker-ssh
fonte
less
estava exibindo um aviso toda vez que o rodava etc. O uso do contêiner de Jeroen está me proporcionando uma experiência muito melhor até agora. Apenas verifique a documentação . O comando de amostra na resposta não parece mais válido.Se você estiver usando o Docker no Windows e quiser obter acesso de shell a um contêiner, use o seguinte:
Provavelmente, você já tem o Git Bash instalado. Caso contrário, instale-o.
fonte
Se o contêiner já tiver saído (talvez devido a algum erro), você poderá
ou
ou
para criar um novo contêiner e colocar um shell nele. Como você especificou --rm, o contêiner será excluído quando você sair do shell.
fonte
Em alguns casos, sua imagem pode ser baseada no Alpine. Nesse caso, ele lançará:
Porque
/bin/bash
não existe. Em vez disso, você deve usar:ou
fonte
SSH em um contêiner Docker usando este comando:
fonte
Para conectar-se ao cmd em um contêiner do Windows, use
Onde d8c25fde2769 é o ID do contêiner.
fonte
É simples !
Liste todas as suas imagens do Docker:
No meu sistema, ele mostrou a seguinte saída:
Eu tenho duas imagens do Docker no meu PC. Digamos que eu queira executar o primeiro.
Isso lhe dará controle terminal do contêiner. Agora você pode executar todos os tipos de operações de shell dentro do contêiner. Como fazer
ls
, todas as pastas serão exibidas na raiz do sistema de arquivos.fonte
Para inspecionar arquivos, execute
docker run -it <image> /bin/sh
para obter um terminal interativo. A lista de imagens pode ser obtida pordocker images
. Ao contráriodocker exec
desta solução, também funciona quando uma imagem não inicia (ou fecha imediatamente após a execução).fonte
SOLUÇÃO GOINSIDE
instale a
goinside
ferramenta de linha de comando com:e entre em um contêiner de encaixe com um tamanho de terminal adequado com:
resposta antiga
Colocamos este trecho em
~/.profile
:Isso não apenas torna todos capazes de entrar em um contêiner em execução com:
Ele também resolve um problema de longa duração sobre os tamanhos fixos dos terminais de contêineres do Docker . O que é muito irritante se você enfrentar.
Além disso, se você seguir o link, também terá a conclusão do comando para os nomes dos contêineres do Docker.
fonte
Ou, dependendo da casca, pode ser
Você pode obter o ID do contêiner via
docker ps
comando-i
= interativo-t
= para alocar um psuedo-TTYfonte
Eu criei uma função de terminal para facilitar o acesso ao terminal do contêiner. Talvez seja útil para vocês também:
Portanto, o resultado é, em vez de digitar:
você escreverá:
Coloque o seguinte em seu ~ / .bash_profile (ou qualquer outra coisa que funcione para você), abra uma nova janela do terminal e aproveite o atalho:
fonte
você pode interagir com o terminal no container docker, passando a opção -ti
-t significa terminal -i significa interativo
fonte
docker exec
Definitivamente será uma solução. Uma maneira fácil de trabalhar com a pergunta que você fez é montando o diretório dentro do Docker no diretório do sistema local .Para que você possa visualizar as alterações no caminho local instantaneamente.
fonte
Usar:
A outra maneira, embora exista um perigo, é usar
attach
, mas se você Ctrl+ Csair da sessão, também interromperá o contêiner. Se você quiser apenas ver o que está acontecendo, usedocker logs -f
.fonte
Use este comando:
fonte
Se você tiver o Docker instalado
Kitematic
, poderá usar a GUI. AbraKitematic
no ícone do Docker e, naKitematic
janela, selecione seu contêiner e clique noexec
ícone.Você pode ver o log do contêiner e muitas informações do contêiner (na guia Configurações) nesta GUI também.
fonte
No meu caso, por algum motivo, preciso verificar todas as informações envolvidas na rede em cada contêiner. Portanto, os seguintes comandos devem ser válidos em um contêiner ...
Eu verifiquei todas essas respostas, nenhuma foi útil para mim. Eu procurei informações em outros sites. Não adicionarei um super link aqui, pois ele não está escrito em inglês. Acabei de colocar este post com uma solução resumida para pessoas que têm os mesmos requisitos que eu.
Digamos que você tenha um contêiner em execução chamado light-test. Siga os passos abaixo.
docker inspect light-test -f {{.NetworkSettings.SandboxKey}}
. Este comando receberá resposta como/var/run/docker/netns/xxxx
.ln -s /var/run/docker/netns/xxxx /var/run/netns/xxxx
. O diretório pode não existir, façamkdir /var/run/netns
primeiro.ip netns exec xxxx ip addr show
para explorar o mundo da rede em contêiner.PS.
xxxx
é sempre o mesmo valor recebido do primeiro comando. E, claro, quaisquer outros comandos são válidos, ieip netns exec xxxx netstat -antp|grep 8080
.fonte
Outra opção é usar o nsenter .
fonte
nsenter
. A primeira é que exige que você tenha acesso físico ao host do docker, o que não é um dado (você pode estar trabalhando com uma API do docker remoto). Além disso, a execução sobnsenter
isenta você de várias restrições de segurança e recursos que o Docker coloca em prática (que pode ser um profissional ou um trapaceiro, dependendo do seu ambiente).docker exec
hoje em dia.docker exec
.docker exec
parece mais elegante para mim.Se você estiver usando o Docker Compose, isso o levará para dentro de um contêiner do Docker.
Dentro do contêiner, você será levado ao WORKDIR definido no Dockerfile. Você pode alterar seu diretório de trabalho
fonte
Para executar em um contêiner em execução chamado
test
, abaixo estão os seguintes comandosSe o contêiner tiver
bash
cascaSe o contêiner tiver
bourne
casca e na maioria dos casos estiver presentefonte
Para composição do docker (Docker4Drupal)
Eu uso o Docker for Drupal em um laptop Linux. Depois de executar o contêiner, eu uso '
docker-compose exec php bash
' para conectar-me ao contêiner para poder executar comandos drush. Isso funciona bem para mim.fonte