Me desgrane con éxito a un contenedor Docker usando:
docker exec -i -t 69f1711a205e bash
Ahora necesito editar el archivo y no tengo editores adentro:
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:/#
¿Cómo edito archivos?

Dockerfilee incluir el comando apt-get install y generar su propio contenedor? El contenedor Docker está diseñado así, no a tu manera.Respuestas:
Como en los comentarios, no hay un editor predeterminado establecido, extraño, la
$EDITORvariable de entorno está vacía. Puede iniciar sesión en un contenedor con:Y correr:
O use el siguiente Dockerfile:
Las imágenes de Docker se entregan recortadas al mínimo, por lo que no se instala ningún editor con el contenedor enviado. Por eso es necesario instalarlo manualmente.
EDITAR
También te animo a leer mi publicación sobre el tema.
fuente
docker exec -u 0 -it container_name bash.vim-tiny, probablemente./var/lib/docker/apt-getno funcionaba debido a un problema de permiso dentro del contenedor, así que lo intentésed -i 's/texttobechanged/textwanted/g' filename. Funcionó para mi.Si no desea agregar un editor solo para hacer algunos pequeños cambios (por ejemplo, cambiar la configuración de Tomcat), puede usar:
que lo copia a su máquina local (a su directorio actual). Luego edite el archivo localmente con su editor favorito y luego haga un
para reemplazar el archivo viejo.
fuente
docker cp <container>:C:\inetpub\wwwroot\Web.config .ydocker cp Web.config <container>:C:\inetpub\wwwroot\Web.config.docker exec -u 0 -it mycontainer bash) y luego ejecutando unchowncomando.Puede usarlo
catsi está instalado, lo que probablemente sea el caso si no es un contenedor desnudo / sin procesar. Funciona en un apuro, y está bien cuando copia + pega a un editor apropiado localmente.catgenerará cada línea al recibir una nueva línea. Asegúrese de agregar una nueva línea para esa última línea. ctrl-c envía unSIGINTgato para que salga con gracia. En los comentarios, verá que también puede presionar ctrl-d para indicar el final del archivo ("no se reciben más entradas").Otra opción es algo así como
infilterque inyecta un proceso en el espacio de nombres del contenedor con algo de magia de traza: https://github.com/yadutaf/infilterfuente
ctrl+Des mejor quectrl+C.ctrl+Denvía unEOF. No es necesario agregar una nueva línea adicional al final. Conctrl+C, si olvida agregar la nueva línea, ¡perderá la última línea!Para mantener sus imágenes Docker pequeñas, no instale editores innecesarios. Puede editar los archivos a través de SSH desde el host Docker al contenedor:
fuente
vim scp://vim.wikia . Además, para obtener la dirección IP de su contenedor, puede usarsudo docker inspect <container_id> | grep "IPAddress"vim scp://[email protected]//data/gitea/conf/app.iniasí comovim scp://[email protected]//data/gitea/conf/app.iniy ambos crean un nuevo archivo en blanco.sshprimero en su contenedor acoplable. Ver blog.softwaremill.com/… . Pero generalmente no desea instalarsshen su contenedor.En algún momento primero debe ejecutar el contenedor con
root:Luego, en el contenedor, para instalar Vim o algo más:
fuente
Uso "docker run" (no "docker exec"), y estoy en una zona restringida donde no podemos instalar un editor. Pero tengo un editor en el host Docker.
Mi solución alternativa es: enlazar, montar un volumen desde el host Docker al contenedor ( https://docs.docker.com/engine/reference/run/#/volume-shared-filesystems ) y editar el archivo fuera del contenedor. Se parece a esto:
Esto es principalmente para experimentar, y luego cambiaría el archivo al construir la imagen.
fuente
Después de bombardear el contenedor Docker, simplemente escriba:
fuente
Puede abrir el archivo existente con
y copie todo el texto existente en el portapapeles.
Luego elimine el archivo antiguo con
o renombrar archivo antiguo con
Crear nuevo archivo con
Luego pegue todo el texto copiado en el portapapeles, presione
Entery salga con guardar presionandoctrl+z. Y listo, no es necesario instalar ningún tipo de editores.fuente
Puede editar su archivo en el host y copiarlo rápidamente y ejecutarlo dentro del contenedor. Aquí está mi acceso directo de una línea para copiar y ejecutar un archivo Python:
fuente
Para las operaciones de edición comunes, prefiero instalar
vi( vim-tiny ), que usa solo 1491 kB onanoque usa 1707 kB .Por otro lado
vimutiliza 28.9 MB .Tenemos que recordar que para
apt-get installpoder trabajar, tenemos que hacerloupdatela primera vez, entonces:Para iniciar el editor en CLI necesitamos ingresar
vi.fuente
Si usa el contenedor de Windows y desea cambiar cualquier archivo, puede obtener y usar Vim en la consola Powershell fácilmente.
Para pelar al contenedor de Windows Docker con PowerShell:
docker exec -it <name> powershellPrimero instale el administrador de paquetes Chocolatey
Invoke-WebRequest https://chocolatey.org/install.ps1 -UseBasicParsing | Invoke-Expression;Instalar Vim
choco install vimActualizar VARIABLE AMBIENTAL Puede simplemente
exity volver al contenedorVaya a la ubicación del archivo y vímalo
vim file.txtfuente
Es un poco complicado, pero en un apuro puedes usar
sedoawkhacer pequeñas ediciones o eliminar texto. Tenga cuidado con sus objetivos de expresiones regulares, por supuesto, y tenga en cuenta que es probable que estérooten su contenedor y que tenga que reajustar los permisos.Por ejemplo, eliminar una línea completa que contiene texto que coincide con una expresión regular:
(Más)
fuente
Una manera fácil de editar algunas líneas sería:
fuente
Vea el archivo de edición de la pregunta de desbordamiento de pila en su lugar
Sería una buena opción aquí, si:
cat.Instalar Vim no está permitido o tarda demasiado. Mi situación está utilizando la imagen de MySQL 5.7 cuando quiero cambiar el
my.cnfarchivo, no hay esvim,viy Vim instalar tarda demasiado tiempo (China Gran Firewall).sedse proporciona en la imagen, y es bastante simple. Mi uso es comosed -i /s/testtobechanged/textwanted/g filenameUse
man sedo busque otros tutoriales para un uso más complejo.fuente
Se puede usar
catsi está instalado, con el>caracter. Aquí está la manipulación:Ahora puedes ver el resultado con el comando
fuente
También puede usar un contenedor especial que contendrá solo el comando que necesita: Vim. Elegí python-vim . Se supone que los datos que desea editar están en un contenedor de datos creado con el siguiente Dockerfile:
Podrá editar sus datos montando un volumen Docker (src_volume) que será compartido por su contenedor de datos (src_data) y el contenedor python-vim.
De esa manera, no cambia sus contenedores. Solo usa un contenedor especial para este trabajo.
fuente