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.
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"
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"]
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.
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://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.
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