Fiz o shell com êxito para um contêiner do Docker usando:
docker exec -i -t 69f1711a205e bash
Agora preciso editar o arquivo e não tenho nenhum editor dentro:
root@69f1711a205e:/# nano
bash: nano: command not found
root@69f1711a205e:/# pico
bash: pico: command not found
root@69f1711a205e:/# vi
bash: vi: command not found
root@69f1711a205e:/# vim
bash: vim: command not found
root@69f1711a205e:/# emacs
bash: emacs: command not found
root@69f1711a205e:/#
Como edito arquivos?
Dockerfile
comando include-apt-get install e gerar seu próprio contêiner? O contêiner do Docker foi projetado dessa maneira, não do seu jeito.Respostas:
Como nos comentários, não há editor padrão definido - estranho - a
$EDITOR
variável de ambiente está vazia. Você pode efetuar login em um contêiner com:E corra:
Ou use o seguinte Dockerfile:
As imagens do Docker são fornecidas cortadas ao mínimo necessário - portanto, nenhum editor é instalado com o contêiner enviado. É por isso que é necessário instalá-lo manualmente.
EDITAR
Também encorajo você a ler meu post sobre o assunto.
fonte
docker exec -u 0 -it container_name bash
.vim-tiny
, provavelmente./var/lib/docker/
apt-get
não estava funcionando devido a um problema de permissão dentro do contêiner, então tenteised -i 's/texttobechanged/textwanted/g' filename
. Funcionou para mim.Se você não deseja adicionar um editor apenas para fazer algumas pequenas alterações (por exemplo, alterar a configuração do Tomcat), basta usar:
que o copia para a máquina local (para o diretório atual). Em seguida, edite o arquivo localmente usando seu editor favorito e faça um
para substituir o arquivo antigo.
fonte
docker cp <container>:C:\inetpub\wwwroot\Web.config .
edocker cp Web.config <container>:C:\inetpub\wwwroot\Web.config
.docker exec -u 0 -it mycontainer bash
) e executando umchown
comando.Você pode usar
cat
se estiver instalado, o que provavelmente será o caso se não for um contêiner vazio / bruto. Ele funciona muito bem, e quando copia e cola em um editor apropriado localmente.cat
produzirá cada linha ao receber uma nova linha. Certifique-se de adicionar uma nova linha para essa última linha. ctrl-c envia umSIGINT
gato para sair normalmente. Nos comentários, você vê que também pode pressionar ctrl-d para indicar o final do arquivo ("não haverá mais entrada").Outra opção é algo
infilter
que injeta um processo no namespace do contêiner com alguma mágica do ptrace: https://github.com/yadutaf/infilterfonte
ctrl+D
é melhor quectrl+C
.ctrl+D
envia umEOF
. Você não precisa adicionar uma nova linha extra no final. Comctrl+C
, se você esquecer de adicionar a nova linha, você perderá a última linha!Para manter pequenas as imagens do Docker, não instale editores desnecessários. Você pode editar os arquivos por SSH do host do Docker para o contêiner:
fonte
vim scp://
vim.wikia . Além disso, para obter o endereço IP do seu recipiente, você pode usarsudo docker inspect <container_id> | grep "IPAddress"
vim scp://[email protected]//data/gitea/conf/app.ini
assim como osvim scp://[email protected]//data/gitea/conf/app.ini
dois, basta criar um novo arquivo em branco.ssh
primeiro no contêiner do docker. Consulte blog.softwaremill.com/… . Mas você geralmente não deseja instalarssh
no seu contêiner.Em algum momento você deve primeiro executar o contêiner com
root
:Em seguida, no contêiner, para instalar o Vim ou outra coisa:
fonte
Eu uso "docker run" (não "docker exec") e estou em uma zona restrita onde não podemos instalar um editor. Mas eu tenho um editor no host do Docker.
Minha solução alternativa é: Vincular a montagem de um volume do host do Docker ao contêiner ( https://docs.docker.com/engine/reference/run/#/volume-shared-filesystems ) e editar o arquivo fora do contêiner. Se parece com isso:
Isso é principalmente para experimentar, e mais tarde eu alteraria o arquivo ao criar a imagem.
fonte
Depois de fazer o shell no contêiner do Docker, digite:
fonte
Você pode abrir o arquivo existente com
e copie todo o texto existente na área de transferência.
Em seguida, exclua o arquivo antigo com
ou renomeie o arquivo antigo com
Crie um novo arquivo com
Em seguida, cole todo o texto copiado na área de transferência, pressione
Enter
e saia com salvar pressionandoctrl+z
. E pronto, não há necessidade de instalar nenhum tipo de editor.fonte
Você pode simplesmente editar seu arquivo no host e copiá-lo rapidamente e executá-lo dentro do contêiner. Aqui está o meu atalho de uma linha para copiar e executar um arquivo Python:
fonte
Para as operações de edição comuns que preferem instalar
vi
( vim-tiny ), que usa apenas 1.491 kB ounano
que usa 1707 kB .Por outro lado,
vim
usa 28,9 MB .Temos que lembrar que, para
apt-get install
trabalhar, precisamos fazerupdate
a primeira vez, então:Para iniciar o editor na CLI , precisamos entrar
vi
.fonte
Se você usa o contêiner do Windows e deseja alterar qualquer arquivo, pode obter e usar o Vim no console do Powershell facilmente.
Para o shell do contêiner do Windows Docker com o PowerShell:
docker exec -it <name> powershell
Primeiro instale o gerenciador de pacotes Chocolatey
Invoke-WebRequest https://chocolatey.org/install.ps1 -UseBasicParsing | Invoke-Expression;
Instale o Vim
choco install vim
Atualizar VARIÁVEL AMBIENTAL Você pode justar
exit
e voltar ao contêinerVá para o local do arquivo e vim-o
vim file.txt
fonte
É meio esquisito, mas com uma pitada você pode usar
sed
ouawk
fazer pequenas edições ou remover texto. É claro que tenha cuidado com seus destinos de regex e esteja ciente de que você provavelmente estároot
no seu contêiner e pode ter que reajustar as permissões.Por exemplo, removendo uma linha completa que contém texto que corresponde a uma regex:
(Mais)
fonte
Uma maneira fácil de editar algumas linhas seria:
fonte
Consulte a pergunta sobre estouro de pilha sed sed file edit in place
Seria uma boa opção aqui, se:
cat
.Instalar o Vim não é permitido ou leva muito tempo. Minha situação está usando a imagem MySQL 5.7 quando eu quiser mudar o
my.cnf
arquivo, não hávim
,vi
e instale Vim leva muito tempo (China Great Firewall).sed
é fornecido na imagem e é bastante simples. Meu uso é comosed -i /s/testtobechanged/textwanted/g filename
Use
man sed
ou procure outros tutoriais para um uso mais complexo.fonte
Você pode usar,
cat
se instalado, com o>
caracter. Aqui está a manipulação:Agora você pode ver o resultado com o comando
fonte
Você também pode usar um contêiner especial que conterá apenas o comando necessário: Vim. Eu escolhi o python-vim . Ele pressupõe que os dados que você deseja editar estejam em um contêiner de dados criado com o seguinte Dockerfile:
Você poderá editar seus dados montando um volume do Docker (src_volume) que será compartilhado pelo seu contêiner de dados (src_data) e pelo contêiner python-vim.
Dessa forma, você não muda seus contêineres. Você apenas usa um contêiner especial para este trabalho.
fonte