J'utilise Alpine
(ou une image basée sur Alpine) comme image de base dans mon fichier Docker. Quelles instructions dois-je ajouter pour créer un utilisateur?
Finalement, je vais utiliser cet utilisateur pour exécuter l'application que je placerai dans le conteneur afin que l'utilisateur root ne le fasse pas.
Alpine utilise la commande adduser
et addgroup
pour créer des utilisateurs et des groupes (plutôt que useradd
et 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
Les drapeaux pour adduser
sont:
Utilisation: adduser [OPTIONS] USER [GROUPE] Créez un nouvel utilisateur ou ajoutez USER au GROUPE -H Répertoire de base DIR -g GECOS GECOS champ -s Shell Login Shell -G Groupe GRP -S Créer un utilisateur système -D Ne pas attribuer un mot de passe -H Ne créez pas de répertoire de base -u UID ID utilisateur -k SKEL Répertoire squelette (/etc/skel) .
Les commandes sont adduser
et addgroup
.
Voici un modèle pour Docker que vous pouvez utiliser dans les environnements busybox (Alpine) ainsi que ceux basés sur Debian (Ubuntu, etc.):
ENV USER=docker
ENV UID=12345
ENV GID=23456
RUN addgroup --gid "$GID" "$USER" \
&& adduser \
--disabled-password \
--gecos "" \
--home "$(pwd)" \
--ingroup "$USER" \
--no-create-home \
--uid "$UID" \
"$USER"
Notez les points suivants:
--disabled-password
empêche l'invite de mot de passe--gecos ""
contourne l'invite pour "Nom complet" etc. sur les systèmes basés sur Debian--home "$(pwd)"
définit le domicile de l'utilisateur sur WORKDIR. Vous ne voudrez peut-être pas cela. --no-create-home
empêche que Cruft ne soit copié dans le répertoire à partir de /etc/skel
La description d'utilisation de ces applications est et ne contient pas les drapeaux longs présents dans le code de adduser et addgroup =.
Les drapeaux de forme longue suivants devraient fonctionner à la fois dans les dérivés alpins et debian:
BusyBox v1.28.4 (2018-05-30 10:45:57 UTC) multi-call binary.
Usage: adduser [OPTIONS] USER [GROUP]
Create new user, or add USER to GROUP
--home DIR Home directory
--gecos GECOS GECOS field
--Shell SHELL Login Shell
--ingroup GRP Group (by name)
--system Create a system user
--disabled-password Don't assign a password
--no-create-home Don't create home directory
--uid UID User id
Une chose à noter est que si --ingroup
n'est pas défini, le GID est assigné pour correspondre à l'UID. Si le GID correspondant à l'UID fourni existe déjà, adduser échouera.
BusyBox v1.28.4 (2018-05-30 10:45:57 UTC) multi-call binary.
Usage: addgroup [-g GID] [-S] [USER] GROUP
Add a group or add a user to a group
--gid GID Group id
--system Create a system group
J'ai découvert tout cela en essayant d'écrire ma propre alternative au projet fixuid pour l'exécution de conteneurs en tant qu'hôte UID/GID.
Mon script d'aide au point d'entrée peut être trouvé sur GitHub.
L'intention est de faire précéder ce script en tant que premier argument de ENTRYPOINT
, ce qui devrait permettre à Docker d'inférer l'UID et le GID à partir d'un montage de liaison pertinent.
Une variable d'environnement "TEMPLATE" peut être nécessaire pour déterminer où les autorisations doivent être déduites.
(Au moment de la rédaction, je n'ai pas de documentation pour mon script. Il est toujours sur la liste des tâches !!)