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?
Dockerfile
e 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
$EDITOR
variable 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-get
no 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 unchown
comando.Puede usarlo
cat
si 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.cat
generará 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 unSIGINT
gato 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
infilter
que inyecta un proceso en el espacio de nombres del contenedor con algo de magia de traza: https://github.com/yadutaf/infilterfuente
ctrl+D
es mejor quectrl+C
.ctrl+D
enví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.ini
así comovim scp://[email protected]//data/gitea/conf/app.ini
y ambos crean un nuevo archivo en blanco.ssh
primero en su contenedor acoplable. Ver blog.softwaremill.com/… . Pero generalmente no desea instalarssh
en 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
Enter
y 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 onano
que usa 1707 kB .Por otro lado
vim
utiliza 28.9 MB .Tenemos que recordar que para
apt-get install
poder trabajar, tenemos que hacerloupdate
la 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> powershell
Primero instale el administrador de paquetes Chocolatey
Invoke-WebRequest https://chocolatey.org/install.ps1 -UseBasicParsing | Invoke-Expression;
Instalar Vim
choco install vim
Actualizar VARIABLE AMBIENTAL Puede simplemente
exit
y volver al contenedorVaya a la ubicación del archivo y vímalo
vim file.txt
fuente
Es un poco complicado, pero en un apuro puedes usar
sed
oawk
hacer 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éroot
en 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.cnf
archivo, no hay esvim
,vi
y Vim instalar tarda demasiado tiempo (China Gran Firewall).sed
se proporciona en la imagen, y es bastante simple. Mi uso es comosed -i /s/testtobechanged/textwanted/g filename
Use
man sed
o busque otros tutoriales para un uso más complejo.fuente
Se puede usar
cat
si 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