簡體   English   中英

無法找到 root 用戶:Docker 中的 passwd 文件中沒有匹配的條目

[英]Unable to find user root: no matching entries in passwd file in Docker

我有多個 Atlassian 產品的容器; JIRABitbucketConfluence 當我嘗試訪問正在運行的容器時,我通常使用:

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"

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,構建 f3628c7
  • 所有容器一直在運行,甚至Bitbucket在問題發生后也照常運行
  • 重啟容器后問題消失

您可以使用此命令以 root 用戶訪問容器:

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

嘗試調試。 我認為該腳本可能會刪除或禁用 root 用戶。

此問題是由docker 引擎 bug引起的,但已私下跟蹤,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

...我能說什么,有人正在盡最大努力獲得更多資金。

這是一個長期存在的問題,在我的舊版本 1.10.3 上復制到至少 1.17

正如@sorin 所提到的,docker 論壇Running docker stop and then docker start fixes the problem but is hardly a long-term solution docker Running docker stop and then docker start fixes the problem but is hardly a long-term solution ......

docker exec -u 0 -i -t {container_name_or_hash} /bin/bash解決方案也在@ObranZoltan 在這里提到的同一論壇帖子中可能對您有用,但對許多人不起作用。 請參閱下面的輸出

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM