docker - 找不到用户root : no matching entries in passwd file in Docker

标签 docker jenkins docker-compose bitbucket

我有多个 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 - 找不到用户root : no matching entries in passwd file in Docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41676835/

相关文章:

windows - 在 Windows 10 上的 Docker 中将当前目录挂载为卷

node.js - W : Failed to fetch http://deb. debian.org/debian/dists/jessie-updates/main/binary-amd64/Packages 404 未找到 [IP : 151. 101.140.204 80]

docker - 支持多环境的 SSL/TLS 私钥链

jenkins - 删除具有匹配模式的 Jenkins 作业

jenkins - 构建步骤“Allure 报告”将构建结果更改为UNSTABLE

jenkins - 如何在 jenkins 工作流程构建中执行 if/else 操作?

python - Docker X11 Forward 得到黑屏

docker - 如何在 Docker 中更新 Graylog 版本

docker-compose 连接到其他容器失败

docker - docker-compose up给出错误:bash:sails:找不到命令