imagenes - Contraseña de root dentro de un contenedor Docker
imagenes docker (13)
Estoy usando una imagen Docker que fue construida usando el comando USER para usar un usuario no root llamado
dev
.
Dentro de un contenedor, soy "dev", pero quiero editar el
/etc/hosts
.
Entonces necesito ser root. Estoy probando el comando su, pero se me pide que ingrese la contraseña de root.
¿Cuál es la contraseña predeterminada del usuario raíz dentro de un contenedor Docker?
Cuando inicies el contenedor, serás root pero no sabrás cuál es la raíz de pw. Para establecerlo en algo que conozca, simplemente use "passwd root". Instantánea / confirme el contenedor para guardar sus acciones.
Finalmente, decidí reconstruir mis imágenes de Docker, para cambiar la contraseña de root por algo que sabré.
RUN echo "root:Docker!" | chpasswd
o
RUN echo "Docker!" | passwd --stdin root
La contraseña es ''ubuntu'' para el usuario ''ubuntu'' (al menos en docker para ubuntu: 14.04.03).
NB: ''ubuntu'' se crea después del inicio del contenedor, así que, si solo haces esto:
root@ec384466fbbb:~# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@ec384466fbbb:~# exit
% docker commit ec3844
5d3c03e7d6d861ce519fe33b184cd477b8ad03247ffe19b2a57d3f0992d71bca
docker tag -f 5d3c ubuntu:latest
Obtendrá el indicador raíz directamente. Desde allí, puede forzar el cambio de contraseña de root, confirmar el contenedor y, opcionalmente, etiquetarlo (con -f) en ubuntu: lo último como esto:
$ sudo -i
Debe reconstruir sus eventuales dependencias en ubuntu: latest.
Obtenga un shell de su contenedor en ejecución y cambie la contraseña de root:
docker run -i -t --entrypoint /bin/bash ubuntu
Por defecto, los contenedores Docker se ejecutan como usuario
root
.
Si todavía está usando el contenedor, puede usar el comando de
exit
para volver al usuario
root
(usuario predeterminado) en lugar de volver a ejecutar el contenedor.
Ejemplo
[dev@6c4c86bccf93 ~]$ ls [dev@6c4c86bccf93 ~]$ other-commands.. [dev@6c4c86bccf93 ~]$ exit [root@6c4c86bccf93 /]# ls
Puede iniciar sesión en el contenedor Docker con el usuario raíz (ID = 0) en lugar del usuario predeterminado proporcionado cuando usa la opción
-u
.
P.ej
docker exec -u 0 -it mycontainer bash
root (id = 0) es el usuario predeterminado dentro de un contenedor. El desarrollador de imágenes puede crear usuarios adicionales. Esos usuarios son accesibles por nombre. Al pasar una identificación numérica, el usuario no tiene que existir en el contenedor.
Puede usar el comando root del USUARIO en su Dockerfile.
Puedo hacerlo funcionar con el siguiente comando.
root@gitnew:# docker exec -it --user $(username) $(containername) /bin/bash
Sugeriría una mejor solución es dar el
--add-host NAME:IP
para que Docker se ejecute al iniciar el contenedor.
Eso actualizará el
/etc/hosts/
sin necesidad de convertirse en root.
De lo contrario, puede anular la configuración de
-u USER
indicador
-u USER
en la
docker run
.
Sin embargo, aconsejaría contra esto, ya que realmente no debería estar cambiando las cosas en un contenedor en ejecución.
En cambio, realice sus cambios en un Dockerfile y cree una nueva imagen.
Tuve exactamente este problema de no poder su a root porque estaba corriendo en el contenedor como un usuario sin privilegios.
Pero no quería reconstruir una nueva imagen como sugieren las respuestas anteriores.
En cambio, descubrí que podía acceder al contenedor como root usando ''nsenter'', consulte: https://github.com/jpetazzo/nsenter
Primero determine el PID de su contenedor en el host:
docker exec -u 0 -it containername bash
Luego use nsenter para ingresar al contenedor como root
docker exec -u 0 -it containerName bash
pruebe el siguiente comando para obtener el acceso raíz
$ sudo -i
Hay un par de maneras de hacerlo.
-
Para ejecutar el Docker anulando la configuración de USUARIO
docker inspect --format {{.State.Pid}} <container_name_or_ID>
o
nsenter --target <PID> --mount --uts --ipc --net --pid
-
Haga los permisos de archivo necesarios, etc., durante la creación de la imagen en el archivo Docker
-
Si todos los paquetes están disponibles en su imagen de Linux,
chpasswd
en el dockerfile antes de la utilidad USER.
docker exec -it <MyContainer> bash
root@MyContainer:/# passwd
Enter new UNIX password:
Retype new UNIX password: