web-dev-qa-db-fra.com

Ne peut pas exécuter visudo dans Docker; Le fichier sudoers n'existe pas

Ubuntu n00b ici. Je bricole un conteneur Docker que j'ai créé à l'aide du fichier Dockerfile suivant:

FROM ubuntu
CMD ["tail","-f","/dev/null"]

À l'intérieur du conteneur, en tant qu'utilisateur root, j'essaie d'exécuter visudo et d'obtenir la réponse suivante:

bash: visudo: commande non trouvée

J'ai couru ls /etc et il semble que je n'ai pas non plus de fichier sudoers.

Y a-t-il quelque chose de spécial que j'aurais dû mettre dans mon Dockerfile pour les faire exister?

1
Shaul Behr

Je l'ai travaillé à partir de autre réponse : Sudo n'est pas installé par défaut. Pour installer Sudo:

apt-get update
apt-get install Sudo
2
Shaul Behr

Lorsque vous avez construit le conteneur, vous êtes root afin de pouvoir créer des utilisateurs sans Sudo.

Si vous dérivez une image de conteneur qui contient déjà une directive USER, vous pouvez toujours revenir à la racine avec USER root avant d'utiliser des commandes privilégiées. Vous pouvez ultérieurement émettre une autre directive USER pour redevenir l'utilisateur d'exécution. En d'autres termes:

Une image qui définit un utilisateur sans privilège:

# "plainuser" image
FROM debian
RUN groupadd -g 1000 appgroup && useradd -g appgroup -u 1000 appuser
USER appuser
ENTRYPOINT ["/usr/bin/id"]

Exécutez avec docker run --rm plainuser pour vérifier qu'il fonctionne bien avec l'utilisateur appuser.

Dérivons-le:

# "otheruser" image
FROM plainuser
USER root  # Become root again
RUN groupadd -g 1001 appgroup2 && useradd -g appgroup2 -u 1001 appuser2
USER appuser2 # Set new execution user

Exécuter avec docker run --rm otheruser.

1
xenoid