首页 文章

无法找到用户root:Docker中的passwd文件中没有匹配的条目

提问于
浏览
7

我有多个Atlassian产品的容器; JIRABitbucketConfluence . 当我'm trying to access the running containers I'米通常使用:

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

使用此命令,我可以像往常一样访问,但在运行脚本来提取和压缩日志文件后,我再也无法访问该容器了 .

摘自'清理脚本'

这是第一个失败点,脚本每周运行一次(由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

当脚本向Bitbucket容器执行这两行时,结果是:

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

它在'docker cp'命令上失败了,但只在Bitbucket容器上失败了 . 脚本运行后,使用'bitbucket'(在Dockerfile中定义)和'root'用户都无法访问容器 .

我能够从容器中复制 /etc/passwd ,它按预期包含所有用户 . 当尝试通过uid访问时,我收到以下错误:

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"

252 Bitbucket图像的Dockerfile:

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"]

其他信息:

  • Docker版本1.12.0,构建8eab29e

  • docker-compose版本1.8.0,build f3628c7

  • 所有容器一直在运行,甚至Bitbucket在问题发生后照常工作

  • 重新启动容器后问题消失

3 回答

  • 16

    这个问题是由 docker engine bug 引起的,但是 tracked privately ,Docker要求用户重启引擎!

    看来这个bug可能比两年多了!

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

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

    ......我能说什么,有人正在尽力争取更多资金 .

  • 0

    您可以使用此命令以root用户访问容器:

    docker exec -u 0 -i -t / bin / bash

    尝试调试 . 我认为该脚本可能会删除或禁用root用户 .

  • 2

    这是一个长期存在的问题,在我的旧版本1.10.3上复制到至少1.17

    如@sorin所述,docker forumRunning docker stop and then docker start fixes the problem but is hardly a long-term solution ......

    @ObranZoltan在这里提到的同一个论坛帖子中的 docker exec -u 0 -i -t {container_name_or_hash} /bin/bash 解决方案可能对您有用,但对许多人不起作用 . 请参阅下面的输出

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

相关问题