Tengo un contenedor acoplable con algunos procesos (uwsgi y apio) ejecutándose dentro. Quiero crear un usuario de apio y un usuario de uwsgi para estos procesos, así como un grupo de trabajadores al que pertenecerán, para asignar permisos.
Intenté agregar RUN adduser uwsgiy RUN adduser celerya mi Dockerfile, pero esto está causando problemas, ya que estos comandos solicitan información (he publicado las respuestas de la compilación a continuación).
¿Cuál es la mejor manera de agregar usuarios a un contenedor Docker para establecer permisos para los trabajadores que se ejecutan en el contenedor?
La imagen de My Docker está construida a partir de la base oficial Ubuntu14.04.
Aquí está la salida del Dockerfile cuando se ejecutan los comandos adduser:
Adding user `uwsgi' ...
Adding new group `uwsgi' (1000) ...
Adding new user `uwsgi' (1000) with group `uwsgi' ...
Creating home directory `/home/uwsgi' ...
Copying files from `/etc/skel' ...
[91mEnter new UNIX password: Retype new UNIX password: [0m
[91mpasswd: Authentication token manipulation error
passwd: password unchanged
[0m
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 563.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 564.
[0m
Try again? [y/N]
Changing the user information for uwsgi
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []: Work Phone []: Home Phone []: Other []:
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 589.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590.
[0m
Is the information correct? [Y/n]
---> 258f2f2f13df
Removing intermediate container 59948863162a
Step 5 : RUN adduser celery
---> Running in be06f1e20f64
Adding user `celery' ...
Adding new group `celery' (1001) ...
Adding new user `celery' (1001) with group `celery' ...
Creating home directory `/home/celery' ...
Copying files from `/etc/skel' ...
[91mEnter new UNIX password: Retype new UNIX password: [0m
[91mpasswd: Authentication token manipulation error
passwd: password unchanged
[0m
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 563.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 564.
[0m
Try again? [y/N]
Changing the user information for celery
Enter the new value, or press ENTER for the default
Full Name []: Room Number []: Work Phone []:
Home Phone []: Other []:
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 589.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590.
[0m
Is the information correct? [Y/n]
fuente

useradd --create-home --shell /bin/bashEs más comprensible / legible para los compañeros de trabajo.RUN echo 'newuser:newpassword' | chpasswd--no-log-initopción deuseradd.USER newuser. Si también necesita que el usuario tenga privilegios de root, también puede incluiradduser <username> sudo./bin/sh: useradd: not foundlinux alpinoPara evitar las preguntas interactivas de adduser, puede llamarlo con estos parámetros:
El
--gecosparámetro se usa para establecer la información adicional. En este caso, solo está vacío.En sistemas con busybox (como Alpine), use
Ver busybox adduser
fuente
adduserla solución de alto nivel generalmente se prefiere al uso de funciones de bajo nivel comouseradd.adduser: unrecognized option: gecosEsto no parece funcionar en Alpine.Ubuntu
Pruebe las siguientes líneas en
Dockerfile:useraddopciones (ver:)man useradd:-r,--systemCrear una cuenta del sistema. ver: Implicaciones creando cuentas del sistema-m,--create-homeCree el directorio de inicio del usuario.-d,--home-dir HOME_DIRDirectorio de inicio de la nueva cuenta.-s,--shell SHELLShell de inicio de sesión de la nueva cuenta.-g,--gid GROUPNombre o ID del grupo primario.-G,--groups GROUPSLista de grupos suplementarios.-u,--uid UIDEspecifique la ID de usuario. ver: Comprender cómo funcionan uid y gid en los contenedores Docker-p,--password PASSWORDContraseña cifrada de la nueva cuenta (pubuntu. Ej .).Establecer contraseña de usuario predeterminada
Para establecer la contraseña del usuario, agregue
-p "$(openssl passwd -1 ubuntu)"aluseraddcomando.Alternativamente, agregue las siguientes líneas a su
Dockerfile:La primera instrucción de shell es asegurarse de que esa
-o pipefailopción esté habilitada antesRUNcon una tubería. Leer más: Hadolint: Cubriendo tu Dockerfile .fuente
rootgrupo no indica que tienen acceso de root, solo tienen más acceso de lectura a algunos archivos (como registros), lo cual es útil, pero depende del proyecto.Agregar un usuario en Docker y ejecutar su aplicación con ese usuario es una muy buena práctica para el punto de vista de seguridad. Para hacer eso, recomendaría los siguientes pasos:
Los pasos anteriores son un ejemplo completo de cómo copiar archivos de proyecto NodeJS, crear un grupo de usuarios y usuarios, asignar permisos al usuario para la carpeta del proyecto, cambiar al usuario recién creado y ejecutar la aplicación con ese usuario.
fuente
Puede imitar el Dockerfile de código abierto, por ejemplo:
Nodo: nodo12-github
superset: superset-github
Creo que es una buena forma de seguir el código abierto.
fuente
Todos tienen su favorito personal, y este es el mío:
Referencia: man useradd
La
RUNlínea agregará el usuario y el grupoapp:Utilice un nombre más específico que
appsi la imagen se va a reutilizar como imagen base. Como comentario, inclúyalo--shell /bin/bashsi realmente lo necesita.Crédito parcial: respuesta de Ryan M
fuente
Alternativamente, puedes hacer así.
El primer comando crea un grupo llamado demo . El segundo comando crea un usuario de demostración y lo agrega al grupo de demostración creado anteriormente .
Banderas significa:
fuente
Agregue esta línea a su Dockerfile (puede ejecutar cualquier comando de Linux de esta manera)
fuente