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
- comience con ese usuario
run --user <user>
o mencionelo en suDockerfile
usandoUSER
- 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.