Alpine usa el comando adduser
y addgroup
para crear usuarios y grupos (en lugar de useradd
y usergroup
).
FROM alpine:latest
# Create a group and user
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
# Tell docker that all future commands should run as the appuser user
USER appuser
Las banderas para adduser
son:
Uso: adduser [OPCIONES] USER [GROUP]
Crear nuevo usuario o agregar USUARIO a GRUPO
-h DIR Directorio de inicio
-g GECOS Campo GECOS
-s SHELL Shell de inicio de sesión
-G Grupo GRP
-S Crear un usuario del sistema
-D No asigne una contraseña
-H No crea directorio de inicio
-u ID de usuario de UID
-k Directorio de esqueleto SKEL (/ etc / skel)
Agregar nuevos documentos oficiales de usuario
USER 405
que es el usuario invitado dentro de Alpine Linux.USER guest
?adduser
yaddgroup
los comandos son diferentes deadduser
, yaddgroup
conforme a lo dispuesto por Debian y Ubuntu que a su vez son extremos delanteros auseradd
ygroupadd
. En particular, los comandos de Debian y Ubuntu solo admiten opciones de formato largo. Ver: manpages.debian.org/stretch/adduser/adduser.8.en.htmlLos comandos son
adduser
yaddgroup
.Aquí hay una plantilla para Docker que puede usar en entornos de busybox (alpine) así como en entornos basados en Debian (Ubuntu, etc.):
Tenga en cuenta lo siguiente:
--disabled-password
evita la solicitud de una contraseña--gecos ""
elude la solicitud de "Nombre completo", etc. en sistemas basados en Debian--home "$(pwd)"
establece la casa del usuario en WORKDIR. Puede que no quieras esto.--no-create-home
evita que cruft se copie en el directorio desde/etc/skel
En la descripción de uso de estas aplicaciones faltan los indicadores largos presentes en el código para adduser y addgroup .
Los siguientes indicadores de formato largo deberían funcionar tanto en alpine como en los derivados de Debian:
agregar usuario
Una cosa a tener en cuenta es que si
--ingroup
no está configurado, el GID se asigna para que coincida con el UID. Si el GID correspondiente al UID proporcionado ya existe, el adduser fallará.añadir grupo
Descubrí todo esto mientras intentaba escribir mi propia alternativa al proyecto fixuid para ejecutar contenedores como hosts UID / GID.
Mi script auxiliar de punto de entrada se puede encontrar en GitHub.
La intención es anteponer ese script como el primer argumento al
ENTRYPOINT
que debería hacer que Docker infiera UID y GID de un montaje de enlace relevante.Es posible que se requiera una variable de entorno "PLANTILLA" para determinar de dónde se deben inferir los permisos.
(En el momento de escribir este artículo, no tengo documentación para mi script. ¡Todavía está en la lista de tareas pendientes!)
fuente