web-dev-qa-db-fra.com

Docker: impossible de trouver l'utilisateur root: aucune entrée correspondante dans le fichier passwd

J'ai des conteneurs pour plusieurs produits Atlassian; JIRA, Bitbucket and Confluence. Lorsque j'essaie d'accéder aux conteneurs en cours d'exécution, j'utilise généralement:

docker exec -it -u root ${DOCKER_CONTAINER} bash

Avec cette commande, je peux accéder comme d'habitude, mais après avoir exécuté un script pour extraire et compresser les fichiers journaux, je ne peux plus accéder à ce conteneur. 

Extrait du 'script de nettoyage'

C'est le premier point d'échec, et le script s'exécute une fois par semaine (programmé par Jenkins). 

docker cp ${CLEAN_UP_SCRIPT} ${DOCKER_CONTAINER}:/tmp/${CLEAN_UP_SCRIPT}
if [ $? -eq 0 ]; then
  docker exec -it -u root ${DOCKER_CONTAINER} bash -c "cd ${LOG_DIR} && /tmp/compressOldLogs.sh ${ARCHIVE_FILE}"
fi

Lorsque le script exécute ces deux lignes vers le conteneur Bitbucket, le résultat est le suivant:

unable to find user root: no matching entries in passwd file

Il échoue avec la commande 'docker cp', mais uniquement vers le conteneur Bitbucket. Une fois le script exécuté, le conteneur est inaccessible aux utilisateurs «bitbucket» (définis dans Dockerfile) et «root». 

J'ai pu copier /etc/passwd du conteneur, qui contient tous les utilisateurs comme prévu. En essayant d'accéder par uid, j'obtiens l'erreur suivante:

rpc error: code = 2 desc = oci runtime error: exec failed: process_linux.go:75: starting setns process caused "fork/exec /proc/self/exe: no such file or directory"

Dockerfile pour l'image Bitbucket:

FROM                        Java:openjdk-8-jre

ENV BITBUCKET_HOME          /var/atlassian/application-data/bitbucket
ENV BITBUCKET_INSTALL_DIR   /opt/atlassian/bitbucket
ENV BITBUCKET_VERSION       4.12.0
ENV DOWNLOAD_URL            https://downloads.atlassian.com/software/stash/downloads/atlassian-bitbucket-${BITBUCKET_VERSION}.tar.gz

ARG user=bitbucket
ARG group=bitbucket
ARG uid=1000
ARG gid=1000

RUN mkdir -p $(dirname $BITBUCKET_HOME) \
    && groupadd -g ${gid} ${group} \
    && useradd -d "$BITBUCKET_HOME" -u ${uid} -g ${gid} -m -s /bin/bash ${user}

RUN mkdir -p                                ${BITBUCKET_HOME} \
    && mkdir -p                             ${BITBUCKET_HOME}/shared \
    && chmod -R 700                         ${BITBUCKET_HOME} \
    && chown -R ${user}:${group}            ${BITBUCKET_HOME} \
    && mkdir -p                             ${BITBUCKET_INSTALL_DIR}/conf/Catalina \
    && curl -L --silent                     ${DOWNLOAD_URL} | tar -xz --strip=1 -C "$BITBUCKET_INSTALL_DIR" \
    && chmod -R 700                         ${BITBUCKET_INSTALL_DIR}/ \
    && chown -R ${user}:${group}            ${BITBUCKET_INSTALL_DIR}/

${BITBUCKET_INSTALL_DIR}/bin/setenv.sh

USER        ${user}:${group}

EXPOSE      7990
EXPOSE      7999

WORKDIR     $BITBUCKET_INSTALL_DIR
CMD         ["bin/start-bitbucket.sh", "-fg"]

Information additionnelle:

  • Docker version 1.12.0, build 8eab29e
  • docker-compose version 1.8.0, build f3628c7
  • Tous les conteneurs fonctionnent en permanence, même Bitbucket fonctionne normalement après le problème.
  • Le problème disparaît après un redémarrage du conteneur
7
Magnus

Vous pouvez utiliser cette commande pour accéder au conteneur avec l'utilisateur root:

docker exec -u 0 -i -t {nom_cipient_ou_hash}/bin/bash

essayez de déboguer avec ça. Je pense que le script peut supprimer ou désactiver l'utilisateur root.

16
Orbán Zoltán

Ce problème est dû à un bogue du moteur docker, mais suivi en privé, Docker demande aux utilisateurs de redémarrer le moteur!

Il semble que le virus soit probablement âgé de plus de deux ans!

https://success.docker.com/article/ucp-health-checks-fail-unable-to-find-user-nobody-no-matching-entries-in-passwd-file-observé

https://forums.docker.com/t/unable-to-find-user-root-no-matching-entries-in-passwd-file/26545/7

... que puis-je dire, quelqu'un fait de son mieux pour obtenir plus de financement.

2
sorin

C'est un problème de longue date, dupliqué sur mon ancienne version 1.10.3 à au moins 1.17

Comme mentionné par @sorin le le forum Docker dit Running docker stop and then docker start fixes the problem but is hardly a long-term solution...

La solution docker exec -u 0 -i -t {container_name_or_hash} /bin/bash également dans le même post de forum mentionné ici par @ObranZoltan peut fonctionner pour vous, mais ne fonctionne pas pour beaucoup. Voir ma sortie ci-dessous

$ Sudo docker exec -u 0 -it berserk_nobel /bin/bash 
exec: "/bin/bash": stat /bin/bash: input/output error
0
StevenWernerCS