Alpine usa el comando addusery addgrouppara crear usuarios y grupos (en lugar de useraddy 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 adduserson:
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 405que es el usuario invitado dentro de Alpine Linux.USER guest?adduseryaddgrouplos comandos son diferentes deadduser, yaddgroupconforme a lo dispuesto por Debian y Ubuntu que a su vez son extremos delanteros auseraddygroupadd. 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
adduseryaddgroup.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-passwordevita 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-homeevita que cruft se copie en el directorio desde/etc/skelEn 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
--ingroupno 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
ENTRYPOINTque 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