library imagenes hub entre dockers contenedores container comunicacion compose docker containers root

imagenes - download docker image



Conectar al contenedor docker como usuario distinto de root (6)

Ejecute el comando como usuario de www-data: docker exec -t --user www-data container bash -c "ls -la"

POR defecto al ejecutar

docker run -it [myimage]

O

docker attach [mycontainer]

te conectas al terminal como usuario root, pero me gustaría conectarme como un usuario diferente. es posible?


La única forma en que puedo hacerlo funcionar es a través de:

docker run -it -e USER=$USER -v /etc/passwd:/etc/passwd -v `pwd`:/siem mono bash su - magnus

Así que tengo que especificar la variable de entorno $ USER y también un punto en el archivo / etc / passwd. De esta manera, puedo compilar en la carpeta / siem y conservar la propiedad de los archivos allí no como raíz.


Mi solución:

#!/bin/bash user_cmds="$@" GID=$(id -g $USER) UID=$(id -u $USER) RUN_SCRIPT=$(mktemp -p $(pwd)) ( cat << EOF addgroup --gid $GID $USER useradd --no-create-home --home /cmd --gid $GID --uid $UID $USER cd /cmd runuser -l $USER -c "${user_cmds}" EOF ) > $RUN_SCRIPT trap "rm -rf $RUN_SCRIPT" EXIT docker run -v $(pwd):/cmd --rm my-docker-image "bash /cmd/$(basename ${RUN_SCRIPT})"

Esto permite al usuario ejecutar comandos arbitrarios usando las herramientas proporcionadas por my-docker-image . Observe cómo el directorio de trabajo actual del usuario se monta en volumen en /cmd dentro del contenedor.

Estoy utilizando este flujo de trabajo para permitir que mi equipo de desarrollo compile de forma cruzada el código C / C ++ para el objetivo arm64, cuyo bsp mantengo (la imagen de my-docker-image contiene el compilador cruzado, sysroot, make, cmake, etc.). Con esto un usuario puede simplemente hacer algo como:

cd /path/to/target_software cross_compile.sh "mkdir build; cd build; cmake ../; make"

Donde cross_compile.sh es el script que se muestra arriba. La maquinaria addgroup/useradd permite la propiedad del usuario de cualquier archivo / directorio creado por la compilación.

Si bien esto funciona para nosotros. Parece una especie de hacky. Estoy abierto a implementaciones alternativas ...


Para docker run :

Simplemente agregue la opción --user <user> para cambiar a otro usuario cuando inicie el contenedor de la ventana acoplable.

docker run -it --user nobody busybox

Para docker attach docker exec o el docker exec

Dado que el comando se utiliza para adjuntar / ejecutar en el proceso existente, por lo tanto, utiliza el usuario actual allí directamente.

docker run -it busybox # CTRL-P/Q to quit docker attach <container id> # then you have root user / # id uid=0(root) gid=0(root) groups=10(wheel) docker run -it --user nobody busybox # CTRL-P/Q to quit docker attach <container id> / $ id uid=99(nobody) gid=99(nogroup)

Si realmente desea adjuntar al usuario que desea tener, entonces

  1. comience con ese usuario run --user <user> o mencionelo en su Dockerfile usando USER
  2. cambiar el usuario usando `su

Puede ejecutar un shell en un contenedor de ventana acoplable en ejecución usando un comando como:

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


Puede especificar USER en el Dockerfile. Todas las acciones posteriores se realizarán utilizando esa cuenta. Puede especificar USER una línea antes de CMD o ENTRYPOINT si solo desea usar ese usuario al iniciar un contenedor (y no al crear la imagen). Cuando inicie un contenedor desde la imagen resultante, lo adjuntará como el usuario especificado.