Comment utiliser sudo à l'intérieur d'un conteneur docker?
Normalement, les conteneurs docker sont exécutés à l'aide de l'utilisateur racine. J'aimerais utiliser un autre utilisateur, ce qui n'est pas un problème en utilisant le panneau de l'UTILISATEUR de la directive. Mais cet utilisateur doit être en mesure d'utiliser sudo à l'intérieur du conteneur. Cette commande est manquant.
Ici est un simple Dockerfile à cet effet:
FROM ubuntu:12.04
RUN useradd docker && echo "docker:docker" | chpasswd
RUN mkdir -p /home/docker && chown -R docker:docker /home/docker
USER docker
CMD /bin/bash
L'exécution de ce conteneur, - je obtenir connecté avec l'utilisateur 'support'. Lorsque j'essaie d'utiliser sudo, la commande n'est pas trouvée. J'ai donc essayé d'installer le sudo paquet à l'intérieur de mon Dockerfile à l'aide de
RUN apt-get install sudo
Cette résultats dans Impossible de localiser le paquet sudo
- Juste donner sudo groupe d'utilisateur. askubuntu.com/questions/7477/...
Vous devez vous connecter pour publier un commentaire.
Il suffit de se. Comme regan a souligné, j'ai dû ajouter l'utilisateur à la sudoers groupe. Mais la principale raison était que j'avais oublié de mettre à jour les référentiels de cache, donc apt-get ne pouvais pas trouver le package sudo. Il travaille maintenant. Voici le code complété:
adduser
commande crache de l'utilisation de l'aide pouruseradd
/etc/sudoers.d/
et définir les autorisations pour440
sur ce fichier. Ensuite, l'utilisateur aurait sudo accès sous CentOS, à partir de 6 ans. 5 vous devrez ajouter le#includedir /etc/sudoers.d
directive/etc/sudoers
Les autres réponses ne fonctionne pas pour moi. J'ai continué à chercher et a trouvé un post de blog qui a couvert la façon dont une équipe a été en cours d'exécution non-racine à l'intérieur d'un conteneur docker.
Voici le TL;DR version:
J'ai été en utilisant
FROM node:9.3
pour cela, mais je soupçonne que d'autres similaires contenant des bases marcherait aussi bien.ubuntu:bionic-20180724.1
. J'ai utilisé cette approche, mais, après ce qui précède, il ne me permet pas d'installer un autre package. J'ai ajouté une ligne au-dessusDockerfile
pour installer un paquet avec:RUN apt-get install -y tree
. Cependant, il m'a donné ce message d'erreur:Step xxxx/xxxx : RUN apt-get install -y tree ---> Running in j5e6gsvwfafa Reading package lists... E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied) E: Unable to lock directory /var/lib/apt/lists/
RUN sudo apt-get install -y tree
. Après le réglage de laUSER
quelque chose d'autre queroot
, vous aurez besoin d'utilisersudo
pour toutes les commandes qui nécessitentroot
privilèges.sudo
a été admis dans un Dockerfile.Quand ni sudo ni apt-get est disponible en conteneur, vous pouvez aussi sauter dans l'exécution de conteneur en tant qu'utilisateur root à l'aide de la commande
si vous souhaitez vous connecter à conteneurs et d'installer quelque chose
à l'aide de apt-get
d'abord en tant que réponse ci-dessus à partir de notre frère "Tomáš Záluský"
puis essayez de
il a travaillé avec moi
j'espère que c'est utile pour tous les
Pour quelqu'un qui a ce problème avec une déjà en cours d'exécution conteneur, et ils ne veulent pas nécessairement à la reconstruction, la commande suivante se connecte à l'exécution d'un conteneur avec des privilèges root:
Vous pouvez également vous connecter à l'aide de son ID, plutôt que son nom, par le trouver avec:
Pour enregistrer vos modifications, de sorte qu'ils sont toujours là la prochaine fois que vous lancez le conteneur (ou menu fixe-composer cluster):
Pour démarrer un conteneur qui n'est pas en cours d'exécution et se connecter en tant que root:
Copier à partir de l'exécution d'un conteneur:
Pour exporter une copie de l'image:
De laquelle vous pouvez restaurer à un autre Docker installer à l'aide de:
Il est beaucoup plus rapide, mais il prend plus d'espace pour ne pas compresser à l'aide de:
Et:
Si vous avez un conteneur d'exécution en tant que root qui exécute un script (que vous ne pouvez pas changer) qui a besoin de l'accès à la
sudo
de commande, vous pouvez simplement créer un nouveausudo
script dans votre$PATH
qui appelle le passé de commande.par exemple Dans votre Dockerfile:
-e
de laecho
. Sinon, il sera présent dans le fichier lui-même, le rendant infunctional.sudo -E ls
. Il va essayer d'exécuter-E ls
.Voici comment j'ai configurer un utilisateur non-root avec l'image de base de
ubuntu:18.04
:Ce qui se passe avec le code ci-dessus:
foo
est créé.foo
est ajoutée à la fois lafoo
etsudo
groupe.uid
etgid
est définie à la valeur de999
./home/foo
./bin/bash
.sed
commande ne inline mises à jour pour la/etc/sudoers
fichier pour permettrefoo
etroot
les utilisateurs sans mot de passe d'accès à lasudo
groupe.sed
commande désactive le#includedir
directive qui permettrait à tous les fichiers dans des sous-répertoires pour remplacer ces inline mises à jour.Cela peut ne pas fonctionner pour toutes les images, mais certaines images contiennent un utilisateur root déjà, comme dans le jupyterhub/singleuser image. Avec cette image, c'est tout simplement:
Si vous n'en avez pas déjà un utilisateur root, vous êtes hors de la chance.
Si SUDO ou apt-get n'est pas accessible à l'intérieur du Conteneur, Vous pouvez utiliser, en dessous de l'option en cours d'exécution conteneur.
"f83b5c5bf413" mon conteneur ID & voici exemple de travail à partir de mon terminal: