Como executar o vi no docker container?

103

Eu instalei o docker na minha máquina virtual host. E agora deseja criar um arquivo usando vi.

Mas está me mostrando um erro:

bash: vi: command not found
Krati Jain
fonte
1
O vi não pode ser instalado dentro do contêiner. Qual contêiner você instalou e executou?
Hüseyin BABAL
1
Você tem que ser mais específico. Você está tentando executar o vi dentro de um container? Em caso afirmativo, em qual imagem o container é baseado? Provavelmente você não tem o vi instalado. (apt-get install vim)
wpp de
Depende de onde imagevocê está construindo. Muito provavelmente imagevocê está usando é tão mais leve que só tem coisas que você precisa para rodar como imagem. Você precisa instalar manualmente os pacotes necessários.
ilusionista de
3
Você provavelmente não deveria fazer configuração dentro de um contêiner. Em vez disso, faça isso no Dockerfile.
Adrian Mouat de

Respostas:

150

Faça login no contêiner com o seguinte comando:

docker exec -it <container> bash

Em seguida, execute o seguinte comando.

apt-get update
apt-get install vim
arunprakashpj
fonte
11
Se você encontrar um problema de permissão negada ao executar apt-get, é necessário executar docker exec como root. "docker exec -u root -it <container> bash". Então o apt-get deve funcionar.
java25 de
Obrigado @arunprakashpj. O único comando que funcionou para imagem baixada do repositório AWS.
realPK
37

Seu contêiner provavelmente não o instalou fora da caixa.

Execute apt-get install vimno terminal e você deve estar pronto para ir.

Englund
fonte
2
Sim, mas eu prefiro vim-tiny(Ubuntu)
Ben Whaley
3
Antes de executar 'apt-get install vim', você precisa executar 'apt-get update'.
user1521213
2
Primeiro apt-get updateENTÃOapt-get install vim
Yogi Ghorecha
32

O comando a ser executado depende de qual imagem de base você está usando.

Para Alpine, vié instalado como parte do sistema operacional de base. A instalação vimseria:

apk -U add vim

Para Debian e Ubuntu:

apt-get update && apt-get install -y vim

Para CentOS, vigeralmente é instalado com o sistema operacional de base. Para vim:

yum install -y vim

Isso só deve ser feito no início do desenvolvimento. Depois de obter um contêiner funcional, as alterações nos arquivos devem ser feitas em sua imagem ou configurações armazenadas fora do contêiner. Atualize seu Dockerfile e outros arquivos que ele usa para construir uma nova imagem. Isso certamente não deve ser feito na produção, já que as alterações dentro do contêiner são efêmeras por design e serão perdidas quando o contêiner for substituído.

BMitch
fonte
1
ERRO: Não é possível bloquear o banco de dados: permissão negada
garg10may
1
Os comandos @ garg10may precisam ser executados como root. USER rootdentro do Dockerfile faz isso, mas certifique-se de voltar para o outro usuário. Sou um contêiner em execução:docker exec -u root ...
BMitch
21

USA ISTO:

apt-get update && apt-get install -y vim

Explicação do comando acima

  1. apt-get update => Irá atualizar o pacote atual
  2. apt-get install => Irá instalar o pacote
  3. -y => Irá ignorar a permissão, a permissão padrão será definida como Sim.
  4. vim => Nome do pacote que você deseja instalar.
Yogi Ghorecha
fonte
Tentei, mas recebi este errobash: apt-get: command not found
Junaid de
@Junaid verifique comapk add
Yogi Ghorecha
12

Adicione a seguinte linha em seu Dockerfile e reconstrua a imagem do docker.

RUN apt-get update && apt-get install -y vim
CJ Chang
fonte
9

Como alternativa, mantenha as imagens do docker pequenas, não instalando editores desnecessários. Você pode editar os arquivos por ssh do host docker para o contêiner:

vim scp://remoteuser@container-ip//path/to/document
Mateus
fonte
3
Isso não funcionaria apenas se o contêiner estivesse executando ssh ? Achei que era uma ideia brilhante no início, mas não consigo fazê-la funcionar.
Kevin
7

Use o comando abaixo no contêiner baseado em Debian:

apt-get install vim-tiny

Instruções completas para usar no Dockerfile:

RUN apt-get update && apt-get install --no-install-recommends -y \   
 vim-tiny \  
 && apt-get clean && rm -rf /var/lib/apt/lists/*

Ele não instala pacotes desnecessários e remove arquivos baixados desnecessários, então o tamanho da imagem do docker não aumentará drasticamente.

Pourya MandiSanam
fonte
3

Para instalar dentro do seu contêiner Docker, você pode executar o comando

docker exec apt-get update && apt-get install -y vim

Mas isso será limitado ao contêiner em que o vim está instalado. Para torná-lo disponível para todos os contêineres, edite o Dockerfile e adicione

RUN apt-get update && apt-get install -y vim

ou você também pode estender a imagem no novo Dockerfile e adicionar o comando acima. Por exemplo.

DE <nome da imagem>

RUN apt-get update && apt-get install -y vim

MB11
fonte
1

Dentro do contêiner (no docker, não na VM), por padrão, eles não são instalados. Mesmo o apt-get , o wget não funcionará. Minha VM está sendo executada no Ubuntu 17.10. Para mim yum pacote manaager trabalhou.

Yum não faz parte do debian ou do ubuntu. Faz parte do chapéu vermelho. Mas, ele funciona no Ubuntu e é instalado por padrão como apt-get

Instale o vim, use este comando

yum install -y vim-enhanced 

Para desinstalar o vim:

yum uninstall -y vim-enhanced 

Similarmente,

yum install -y wget 
yum install -y sudo 

-y é para presumir que sim se for solicitado por qualquer pergunta feita após fazer yum install packagename

P Satish Patro
fonte
0

Se você realmente deseja um pequeno editor para manutenção simples em um docker, use-o em seu Dockerfile:

RUN apt-get install -y busybox && ln -s /bin/busybox /bin/vi

Eu usei em um docker baseado no Ubuntu 18. (Claro que você pode precisar de um RUN apt-get updateantes, mas se estiver fazendo seu próprio arquivo Docker, provavelmente já o tem.)

Samuel Åslund
fonte
0

Se você precisar alterar um arquivo apenas uma vez. Você deve preferir fazer a alteração localmente e criar uma nova imagem do docker com esse arquivo.

Digamos que em uma imagem docker, você precise alterar um arquivo denominado myFile.xml em / path / para / docker / image /. Então, você precisa fazer.

  1. Copie myFile.xml em seu sistema de arquivos local e faça as alterações necessárias.
  2. Crie um arquivo chamado 'Dockerfile' com o seguinte conteúdo-
FROM docker-repo:tag
ADD myFile.xml /path/to/docker/image/

Em seguida, crie sua própria imagem docker com docker build -t docker-repo:v-x.x.x .

Em seguida, use sua imagem docker recém-criada.

misbah
fonte