modificar crear contenedor docker

crear - ¿Cómo edito un archivo después de convertirlo en un contenedor Docker?



crear contenedor docker (14)

Como en los comentarios, no hay un conjunto de editor predeterminado, extraño, la $EDITOR entorno $EDITOR está vacía. Puede iniciar sesión en un contenedor con:

docker exec -it <container> bash

Y correr:

apt-get update apt-get install vim

O use el siguiente Dockerfile:

FROM confluent/postgres-bw:0.1 RUN ["apt-get", "update"] RUN ["apt-get", "install", "-y", "vim"]

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 post sobre el tema.

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?


Después de bombardear el contenedor Docker, simplemente escriba:

apt-get update apt-get install nano


En algún momento primero debe ejecutar el contenedor con root :

docker exec -ti --user root <container-id> /bin/bash

Luego, en el contenedor, para instalar Vim o algo más:

apt-get install vim


Es un poco complicado, pero en un apuro puedes usar sed o awk para 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 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:

awk ''!/targetText/'' file.txt > temp && mv temp file.txt

(More)


Para las operaciones de edición comunes, prefiero instalar vi ( vim-tiny ), que usa solo 1491 kB o nano que usa 1707 kB .

Por otro lado, vim usa 28.9 MB .

Tenemos que recordar que para que apt-get install funcione, tenemos que hacer la update la primera vez, así que:

apt-get update apt-get install vim-tiny

Para iniciar el editor en CLI necesitamos ingresar vi .


Para mantener pequeñas las imágenes de Docker, no instale editores innecesarios. Puede editar los archivos a través de SSH desde el host Docker al contenedor:

vim scp://remoteuser@containerip//path/to/document


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:

docker cp main.py my-container:/data/scripts/ ; docker exec -it my-container python /data/scripts/main.py


Puede usar cat si está instalado, lo que probablemente sea el caso si no es un contenedor desnudo / crudo. Funciona en un apuro, y está bien cuando copia + pega a un editor apropiado localmente.

cat > file # 1. type in your content # 2. leave a newline at end of file # 3. ctrl-c / (better: ctrl-d) cat file

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 un SIGINT para que cat salga con gracia. En los comentarios, verá que también puede presionar ctrl-d para denotar 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 ptrace: https://github.com/yadutaf/infilter


Si no desea agregar un editor solo para hacer algunos pequeños cambios (por ejemplo, cambiar la configuración de Tomcat), puede usar:

docker cp <container>:/path/to/file.ext .

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

docker cp file.ext <container>:/path/to/file.ext

para reemplazar el archivo viejo.


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 contenedor

  • Vaya a la ubicación del archivo y vim file.txt it vim file.txt


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:

FROM debian:jessie ENV MY_USER_PASS my_user_pass RUN groupadd --gid 1001 my_user RUN useradd -ms /bin/bash --home /home/my_user / -p $(echo "print crypt("${MY_USER_PASS:-password}", "salt")" | perl) / --uid 1001 --gid 1001 my_user ADD src /home/my_user/src RUN chown -R my_user:my_user /home/my_user/src RUN chmod u+x /home/my_user/src CMD ["true"]

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.

docker volume create --name src_volume docker build -t src_data . docker run -d -v src_volume:/home/my_user/src --name src_data_1 src_data docker run --rm -it -v src_volume:/src fedeg/python-vim:latest

De esa manera, no cambia sus contenedores. Solo usa un contenedor especial para este trabajo.


Una manera fácil de editar algunas líneas sería:

echo "deb http://deb.debian.org/debian stretch main" > sources.list


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:

docker run -v /outside/dir:/container/dir

Esto es principalmente para experimentar, y luego cambiaría el archivo al construir la imagen.


Vea el archivo de edición de pregunta de desbordamiento de pila en su lugar

Sería una buena opción aquí, si:

  1. Para modificar un archivo grande, es imposible usar cat .
  2. Instalar Vim no está permitido o tarda demasiado. Mi situación es usar la imagen MySQL 5.7 cuando quiero cambiar el archivo my.cnf , no hay vim , vi , y la instalación de Vim toma demasiado tiempo (China Great Firewall). sed se proporciona en la imagen, y es bastante simple. Mi uso es como

    sed -i /s/testtobechanged/textwanted/g filename

    Use man sed o busque otros tutoriales para un uso más complejo.