¿Cómo ejecutar vi en el contenedor Docker?

101

He instalado Docker en mi máquina virtual host. Y ahora quiero crear un archivo usando vi.

Pero me muestra un error:

bash: vi: command not found
Krati Jain
fuente
1
vi no se puede instalar dentro del contenedor. ¿Qué contenedor ha instalado y ejecutado?
Hüseyin BABAL
1
Tienes que ser más específico. ¿Está intentando ejecutar vi dentro de un contenedor, si es así, en qué imagen se basa el contenedor? Es muy probable que no tenga instalado vi. (apt-get install vim)
wpp
Depende de desde imagedónde esté construyendo. Lo más probable imagees que esté utilizando es tan ligero que solo tiene cosas que necesita para ejecutar como una imagen. Necesita instalar manualmente los paquetes que necesita.
ilusionista
3
Probablemente no deberías hacer una configuración dentro de un contenedor. En su lugar, hágalo en el Dockerfile.
Adrian Mouat

Respuestas:

139

inicie sesión en el contenedor con el siguiente comando:

docker exec -it <container> bash

Luego, ejecute el siguiente comando.

apt-get update
apt-get install vim
arunprakashpj
fuente
11
Si encuentra un problema de permiso denegado mientras ejecuta apt-get, debe ejecutar docker exec como root. "docker exec -u root -it <contenedor> bash". Entonces apt-get debería funcionar.
java25
Gracias @arunprakashpj. El único comando que funcionó para la imagen descargada del repositorio de AWS.
realPK
36

Es probable que su contenedor no lo haya instalado de fábrica.

Ejecutar apt-get install vimen la terminal y debería estar listo para comenzar.

Englund
fuente
2
Sí, pero prefiero vim-tiny(Ubuntu)
Ben Whaley
2
Antes de ejecutar 'apt-get install vim', debe ejecutar 'apt-get update'.
user1521213
2
Primero apt-get updateENTONCESapt-get install vim
Yogi Ghorecha
30

El comando para ejecutar depende de la imagen base que esté utilizando.

Para Alpine, vise instala como parte del sistema operativo base. La instalación vimsería:

apk -U add vim

Para Debian y Ubuntu:

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

Para CentOS, vigeneralmente se instala con el sistema operativo base. Para vim:

yum install -y vim

Esto solo debe hacerse en el desarrollo temprano. Una vez que obtenga un contenedor que funcione, los cambios en los archivos deben realizarse en su imagen o configuraciones almacenadas fuera de su contenedor. Actualice su Dockerfile y otros archivos que utiliza para crear una nueva imagen. Esto ciertamente no debería hacerse en producción, ya que los cambios dentro del contenedor son efímeros por diseño y se perderán cuando se reemplace el contenedor.

BMitch
fuente
1
ERROR: No se puede bloquear la base de datos: Permiso denegado
garg10may
1
Los comandos @ garg10may deben ejecutarse como root. USER rootdentro del Dockerfile hace esto, pero asegúrese de volver a su otro usuario. Soy un contenedor en ejecución:docker exec -u root ...
BMitch
19

UTILIZAR ESTA:

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

Explicación del comando anterior

  1. apt-get update => Actualizará el paquete actual
  2. apt-get install => Instalará el paquete
  3. -y => Pasará el permiso, el permiso predeterminado se establecerá en Sí.
  4. vim => Nombre del paquete que desea instalar.
Yogi Ghorecha
fuente
12

Agregue la siguiente línea en su Dockerfile y luego reconstruya la imagen de la ventana acoplable.

RUN apt-get update && apt-get install -y vim
CJ Chang
fuente
8

Alternativamente, mantenga las imágenes de la ventana acoplable pequeñas al no instalar editores innecesarios. Puede editar los archivos a través de ssh desde el host de la ventana acoplable al contenedor:

vim scp://remoteuser@container-ip//path/to/document
Mateo
fuente
3
¿No funcionaría esto solo si el contenedor ejecuta ssh ? Al principio pensé que era una idea brillante, pero parece que no puedo hacer que funcione.
Kevin
7

Utilice el siguiente comando en un contenedor basado en Debian:

apt-get install vim-tiny

Instrucciones completas para usar en Dockerfile:

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

No instala paquetes innecesarios y elimina los archivos descargados innecesarios, por lo que el tamaño de la imagen de la ventana acoplable no aumentará drásticamente.

Pourya MandiSanam
fuente
3

Para instalar dentro de su contenedor Docker, puede ejecutar el comando

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

Pero esto se limitará al contenedor en el que está instalado vim. Para que esté disponible para todos los contenedores, edite el Dockerfile y agregue

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

o también puede extender la imagen en el nuevo Dockerfile y agregar el comando anterior. P.ej.

DESDE <nombre de la imagen>

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

MB11
fuente
1

Dentro del contenedor (en la ventana acoplable, no en la VM), estos no están instalados por defecto. Incluso apt-get , wget no funcionará. Mi máquina virtual se ejecuta en Ubuntu 17.10. Para mi ñam paquete manaager funcionó.

Yum no es parte de debian o ubuntu. Es parte de Red-Hat. Pero funciona en Ubuntu y se instala de forma predeterminada como apt-get

Para instalar vim, use este comando

yum install -y vim-enhanced 

Para desinstalar vim:

yum uninstall -y vim-enhanced 

Similar,

yum install -y wget 
yum install -y sudo 

-y es para asumir que sí si se le solicita cualquier qustion después de hacer yum install packagename

P Satish Patro
fuente
0

Si realmente desea un editor pequeño para una limpieza simple en una ventana acoplable, use esto en su Dockerfile:

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

Lo usé en una ventana acoplable basada en Ubuntu 18. (Por supuesto, es posible que necesite un RUN apt-get updateantes, pero si está creando su propio archivo Docker, probablemente ya lo tenga).

Samuel Åslund
fuente
0

Si necesita cambiar un archivo solo una vez. Debería preferir realizar el cambio localmente y crear una nueva imagen de la ventana acoplable con este archivo.

Digamos que en una imagen de la ventana acoplable, necesita cambiar un archivo llamado myFile.xml en / ruta / a / docker / image /. Entonces, debes hacerlo.

  1. Copie myFile.xml en su sistema de archivos local y realice los cambios necesarios.
  2. Cree un archivo llamado 'Dockerfile' con el siguiente contenido:
FROM docker-repo:tag
ADD myFile.xml /path/to/docker/image/

Luego construya su propia imagen de Docker con docker build -t docker-repo:v-x.x.x .

Luego, use su imagen de ventana acoplable recién compilada.

misbah
fuente